Introduction 1
Shifting from C to C++ 13
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 22
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 49
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 sure base classes have virtual destructors. 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 77
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 123
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 153
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 212
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
Afterword 237
Index 239