Prefer const and inline to #define . |
||
Prefer <iostream> to <stdio.h> . | ||
Prefer new and delete to malloc and free . | ||
Prefer C++-style comments. | ||
Item 5: | Use the same form in corresponding uses of new and delete . | |
Use delete on pointer members in destructors. | ||
Be prepared for out-of-memory conditions. | ||
Adhere to convention when writing operator new and operator delete . | ||
Avoid hiding the "normal" form of new . | ||
Write operator delete if you write operator new . | ||
Declare a copy constructor and an assignment operator for classes with dynamically allocated memory. | ||
Prefer initialization to assignment in constructors. | ||
List members in an initialization list in the order in which they are declared. | ||
Make sure base classes have virtual destructors. | ||
Have operator= return a reference to *this . | ||
Assign to all data members in operator= . | ||
Check for assignment to self in operator= . | ||
Strive for class interfaces that are complete and minimal. | ||
Differentiate among member functions, non-member functions, and friend functions. | ||
Avoid data members in the public interface. | ||
Use const whenever possible. | ||
Prefer pass-by-reference to pass-by-value. | ||
Don't try to return a reference when you must return an object. | ||
Choose carefully between function overloading and parameter defaulting. | ||
Avoid overloading on a pointer and a numerical type. | ||
Guard against potential ambiguity. | ||
Explicitly disallow use of implicitly generated member functions you don't want. | ||
Partition the global namespace. | ||
Avoid returning "handles" to internal data. | ||
Avoid member functions that return non-const pointers or references to members less accessible than themselves. | ||
Never return a reference to a local object or to a dereferenced pointer initialized by new within the function. | ||
Postpone variable definitions as long as possible. | ||
Use inlining judiciously. | ||
Minimize compilation dependencies between files. | ||
Make sure public inheritance models "isa." | ||
Differentiate between inheritance of interface and inheritance of implementation. | ||
Never redefine an inherited nonvirtual function. | ||
Never redefine an inherited default parameter value. | ||
Avoid casts down the inheritance hierarchy. | ||
Model "has-a" or "is-implemented-in-terms-of" through layering. | ||
Differentiate between inheritance and templates. | ||
Use private inheritance judiciously. | ||
Use multiple inheritance judiciously. | ||
Say what you mean; understand what you're saying. | ||
Know what functions C++ silently writes and calls. | ||
Prefer compile-time and link-time errors to runtime errors. | ||
Ensure that non-local static objects are initialized before they're used. | ||
Pay attention to compiler warnings. | ||
Familiarize yourself with the standard library. | ||
Improve your understanding of C++. | ||