-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clean up code checking class invariants #28
Comments
It's handy to have the So the
1
2Since only the first virtual function in a class increases its size (compiler-dependent, but on most - if not all - it's like this) and non-virtual functions don't affect the class size, it's not worth cluttering the source with code like: #if !defined(NDEBUG) \
|| (defined(DOCTEST_LIBRARY_INCLUDED) && !defined DOCTEST_CONFIG_DISABLE)
# define VITA_DEBUG_OR_TEST
#endif
class A
{
// ...
#if defined(VITA_DEBUG_OR_TEST)
bool is_valid() const;
#endif
};
#if defined(VITA_DEBUG_OR_TEST)
bool A::is_valid()
{
// ...
}
#endif |
Classes should specify their invariants: what is true before and after executing any public method.
The function used to check the consistency of an object (
debug()
) should be renamedis_valid()
(the most frequently used name);Eliminate clutter and redundant checks.
A common pattern to implement invariants in classes is for the constructor of the class to throw an exception if the invariant is not satisfied. Since methods preserve the invariants, they can assume the validity of the invariant and need not explicitly check for it.
The
debug()
/is_valid()
method should exist only in the debug build, thus it does not add to code bloat.References:
The text was updated successfully, but these errors were encountered: