Introduction(新增批注共2條) 1 Chapter 1: Accustoming Yourself to C++ (新增批注共12條) 11 Item 1: View C++ as a federation of languages. 11 Item 2: Prefer consts, enums, and inlines to#defines. 14 Item 3: Use const whenever possible. 19 Item 4: Make sure that objects are initialized before they’reused. 28 Chapter 2: Constructors, Destructors, and Assignment Operators(新增批注共9條) 37 Item 5: Know what functions C++ silently writes andcalls. 37 Item 6: Explicitly disallow the use of compiler-generatedfunctions you do not want. 41 Item 7: Declare destructors virtual in polymorphic baseclasses. 43 Item 8: Prevent exceptions from leaving destructors. 49 Item 9: Never call virtual functions during construction ordestruction. 53 Item 10: Have assignment operators return a reference to*this. 57 Item 11: Handle assignment to self in operator=. 58 Item 12: Copy all parts of an object. 62 Chapter 3: Resource Management(新增批注共7條) 66 Item 13: Use objects to manage resources. 66 Item 14: Think carefully about copying behavior inresource-managing classes. 71 Item 15: Provide access to raw resources in resource-managingclasses. 74 Item 16: Use the same form in corresponding uses of new anddelete. 78 Item 17: Store newed objects in smart pointers in standalonestatements. 80 Chapter 4: Designs and Declarations(新增批注共28條) 83 Item 18: Make interfaces easy to use correctly and hard to useincorrectly. 83 Item 19: Treat class design as type design. 89 Item 20: Prefer pass-by-reference-to-const topass-by-value. 91 Item 21: Don’t try to return a reference when you must return anobject. 96 Item 22: Declare data members private. 101 Item 23: Prefer non-member non-friend functions to memberfunctions. 105 Item 24: Declare non-member functions when type conversionsshould apply to all parameters. 109 Item 25: Consider support for a non-throwing swap. 113 Chapter 5: Implementations(新增批注共42條) 122 Item 26: Postpone variable definitions as long aspossible. 122 Item 27: Minimize casting. 125 Item 28: Avoid returning “handles” to objectinternals. 133 Item 29: Strive for exception-safe code. 137 Item 30: Understand the ins and outs of inlining. 146 Item 31: Minimize compilation dependencies betweenfiles. 152 Chapter 6: Inheritance and Object-Oriented Design (新增批注共39條) 162 Item 32: Make sure public inheritance models “is-a.” 163 Item 33: Avoid hiding inherited names. 169 Item 34: Differentiate between inheritance of interface andinheritance of implementation. 174 Item 35: Consider alternatives to virtual functions. 183 Item 36: Never redefine an inherited non-virtualfunction. 192 Item 37: Never redefine a function’s inherited default parametervalue. 194 Item 38: Model “has-a” or is-implemented-in-terms-of” throughcomposition. 198 Item 39: Use private inheritance judiciously. 201 Item 40: Use multiple inheritance judiciously. 207 Chapter 7: Templates and Generic Programming(新增批注共28條) 215 Item 41: Understand implicit interfaces and compile-timepolymorphism. 216 Item 42: Understand the two meanings of typename. 220 Item 43: Know how to access names in templatized baseclasses. 225 Item 44: Factor parameter-independent code out oftemplates. 230 Item 45: Use member function templates to accept “all compatibletypes.” 235 Item 46: Define non-member functions inside templates whentype conversions are desired. 240 Item 47: Use traits classes for information abouttypes. 245 Item 48: Be aware of template metaprogramming. 251 Chapter 8: Customizing new and delete (新增批注共17條) 258 Item 49: Understand the behavior of the new-handler. 259 Item 50: Understand when it makes sense to replace new anddelete. 267 Item 51: Adhere to convention when writing new anddelete. 272 Item 52: Write placement delete if you write placementnew. 276 Chapter 9: Miscellany(新增批注共8條) 283 Item 53: Pay attention to compiler warnings. 283 Item 54: Familiarize yourself with the standard library, includingTR1. 284 Item 55: Familiarize yourself with Boost. 290 Appendix A: Beyond Effective C++ 295 Appendix B: Item Mappings Between Second and Third Editions 299 Index 302