Shifting from C to C++ | |||
Item 1 | Prefer const and inline to #define. | 13 | |
Item 2 | Prefer <iostream> to <stdio.h>. | 17 | |
Item 3 | Prefer new and delete to malloc and free. | 19 | |
Item 4 | Prefer C++-style comments. | 21 | |
Memory Management | |||
Item 5 | Use the same form in corresponding uses of new and delete. | 23 | |
Item 6 | Use delete on pointer members in destructors. | 24 | |
Item 7 | Be prepared for out-of-memory conditions. | 25 | |
Item 8 | Adhere to convention when writing operator new and operator delete. | 33 | |
Item 9 | Avoid hiding the "normal" form of new. | 37 | |
Item 10 | Write operator delete if you write operator new. | 39 | |
Constructors, Destructors, and Assignment Operators | |||
Item 11 | Declare a copy constructor and an assignment operator for classes with dynamically allocated memory. | 49 | |
Item 12 | Prefer initialization to assignment in constructors. | 52 | |
Item 13 | List members in an initialization list in the order in which they are declared. | 57 | |
Item 14 | Make destructors virtual in base classes. | 59 | |
Item 15 | Have operator= return a reference to *this. | 64 | |
Item 16 | Assign to all data members in operator=. | 68 | |
Item 17 | Check for assignment to self in operator=. | 71 | |
Classes and Functions: Design and Declaration | |||
Item 18 | Strive for class interfaces that are complete and minimal. | 79 | |
Item 19 | Differentiate among member functions, non-member functions, and friend functions. | 84 | |
Item 20 | Avoid data members in the public interface. | 89 | |
Item 21 | Use const whenever possible. | 91 | |
Item 22 | Prefer pass-by-reference to pass-by-value. | 98 | |
Item 23 | Don't try to return a reference when you must return an object. | 101 | |
Item 24 | Choose carefully between function overloading and parameter defaulting. | 106 | |
Item 25 | Avoid overloading on a pointer and a numerical type. | 109 | |
Item 26 | Guard against potential ambiguity. | 113 | |
Item 27 | Explicitly disallow use of implicitly generated member functions you don't want. | 116 | |
Item 28 | Partition the global namespace. | 117 | |
Classes and Functions: Implementation | |||
Item 29 | Avoid returning "handles" to internal data. | 123 | |
Item 30 | Avoid member functions that return non-const pointers or references to members less accessible than themselves. | 129 | |
Item 31 | Never return a reference to a local object or to a dereferenced pointer initialized by new within the function. | 131 | |
Item 32 | Postpone variable definitions as long as possible. | 135 | |
Item 33 | Use inlining judiciously. | 137 | |
Item 34 | Minimize compilation dependencies between files. | 143 | |
Inheritance and Object-Oriented Design | |||
Item 35 | Make sure public inheritance models "isa." | 154 | |
Item 36 | Differentiate between inheritance of interface and inheritance of implementation. | 161 | |
Item 37 | Never redefine an inherited nonvirtual function. | 169 | |
Item 38 | Never redefine an inherited default parameter value. | 171 | |
Item 39 | Avoid casts down the inheritance hierarchy. | 173 | |
Item 40 | Model "has-a" or "is-implemented-in-terms-of" through layering. | 182 | |
Item 41 | Differentiate between inheritance and templates. | 185 | |
Item 42 | Use private inheritance judiciously. | 189 | |
Item 43 | Use multiple inheritance judiciously. | 194 | |
Item 44 | Say what you mean; understand what you're saying. | 210 | |
Miscellany | |||
Item 45 | Know what functions C++ silently writes and calls. | 212 | |
Item 46 | Prefer compile-time and link-time errors to runtime errors. | 216 | |
Item 47 | Ensure that non-local static objects are initialized before they're used. | 219 | |
Item 48 | Pay attention to compiler warnings. | 223 | |
Item 49 | Familiarize yourself with the standard library. | 224 | |
Item 50 | Improve your understanding of C++. | 232 |