Dedication | |||
Preface | |||
Acknowledgments | |||
Introduction | |||
Prefer const and inline to #define .
|
|||
Prefer <iostream> to <stdio.h> .
| |||
Prefer new and delete to malloc and free .
| |||
Prefer C++-style comments. | |||
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++. | |||