| |
| |
Preface | |
| |
| |
Acknowledgments | |
| |
| |
Introduction | |
| |
| |
| |
Accustoming Yourself to C++ | |
| |
| |
| |
View C++ as a federation of languages | |
| |
| |
| |
Prefer consts, enums, and inlines to #defines | |
| |
| |
| |
Use const whenever possible | |
| |
| |
| |
Make sure that objects are initialized before theyre used | |
| |
| |
| |
Constructors, Destructors, and Assignment Operators | |
| |
| |
| |
Know what functions C++ silently writes and calls | |
| |
| |
| |
Explicitly disallow the use of compiler-generated functions you do not want | |
| |
| |
| |
Declare destructors virtual in polymorphic base classes | |
| |
| |
| |
Prevent exceptions from leaving destructors | |
| |
| |
| |
Never call virtual functions during construction or destruction | |
| |
| |
| |
Have assignment operators return a reference to *this | |
| |
| |
| |
Handle assignment to self in operator= | |
| |
| |
| |
Copy all parts of an object | |
| |
| |
| |
Resource Management | |
| |
| |
| |
Use objects to manage resources | |
| |
| |
| |
Think carefully about copying behavior in resource-managing classes | |
| |
| |
| |
Provide access to raw resources in resource-managing classes | |
| |
| |
| |
Use the same form in corresponding uses of new and delete | |
| |
| |
| |
Store newed objects in smart pointers in standalone statements | |
| |
| |
| |
Designs and Declarations | |
| |
| |
| |
Make interfaces easy to use correctly and hard to use incorrectly | |
| |
| |
| |
Treat class design as type design | |
| |
| |
| |
Prefer pass-by-reference-to-const to pass-by-value | |
| |
| |
| |
Dont try to return a reference when you must return an object | |
| |
| |
| |
Declare data members private | |
| |
| |
| |
Prefer non-member non-friend functions to member functions | |
| |
| |
| |
Declare non-member functions when type conversions should apply to all parameters | |
| |
| |
| |
Consider support for a non-throwing swap | |
| |
| |
| |
Implementations | |
| |
| |
| |
Postpone variable definitions as long as possible | |
| |
| |
| |
Minimize casting | |
| |
| |
| |
Avoid returning handles to object internals | |
| |
| |
| |
Strive for exception-safe code | |
| |
| |
| |
Understand the ins and outs of inlining | |
| |
| |
| |
Minimize compilation dependencies between files | |
| |
| |
| |
Inheritance and Object-Oriented Design 149Item | |
| |
| |
| |
Make sure public inheritance models is-a | |
| |
| |
| |
Avoid hiding inherited names | |
| |
| |
| |
Differentiate between inheritance of interface and inheritance of implementation | |
| |
| |
| |
Consider alternatives to virtual functions | |
| |
| |
| |
Never redefine an inherited non-virtual function | |
| |
| |
| |
Never redefine a functions inherited default parameter value | |
| |
| |
| |
Model has-a or is-implemented-in-terms-of through composition | |
| |
| |
| |
Use private inheritance judiciously | |
| |
| |
| |
Use multiple inheritance judiciously | |
| |
| |
| |
Templates and Generic Programming 199Item | |
| |
| |
| |
Understand implicit interfaces and compile-time polymorphism | |
| |
| |
| |
Understand the two meanings of typename | |
| |
| |
| |
Know how to access names in templatized base classes | |
| |
| |
| |
Factor parameter-independent code out of templates | |
| |
| |
| |
Use member function templates to accept all compatible types | |
| |
| |
| |
Define non-member functions inside templates when type conversions are desired | |
| |
| |
| |
Use traits classes for information about types | |
| |
| |
| |
Be aware of template metaprogramming | |
| |
| |
| |
Customizing new and delete 239Item | |
| |
| |
| |
Understand the behavior of the new-handler | |
| |
| |
| |
Understand when it makes sense to replace new and delete | |
| |
| |
| |
Adhere to convention when writing new and delete | |
| |
| |
| |
Write placement delete if you write placement new | |
| |
| |
| |
Misc | |