Preface
Acknowledgments
Introduction
Chapter 1:Accustoming Yourselft0 C++
Item 1:View C++as a flederation oflanguages.
Item 2:Prefler consts,enums,and inlines to #defines.
Item 3:Use const whenever pOSSible.
Item 4:Make sure that objects are initialized before they're used.
Chapter 2:C0nstI'Uctors,DestI'Uctors,and Assignment operators
Item 5:Know what functions C++silently writes and calls.
Item 6:Explicitly disanOW the use of compilergenerated functions yOH do not want.
Item 7:Declare destruetors virtual in polymorphic base dasses.
Item 8:Prevent exceptions flrom leaVing destructors.
Item 9:Never call Virtual functions during construetion Or destruction.
Item 10:Have assignment operators return a reference tO*this.
Item 11:Handle assignment to self in operator=.
Item 12:CoPY a11 parts 0fan 0bject.
Chapter 3:Resource ManageInent
Item 13:Use objects to manage resources.
Item 14:Think carefully about copying behavior in resource-managing cIasses.
Item 15:Provide access t0 raw resources in resourcemanaging classes.
Item 16:Use the same form in corresponding uses 0f new and delete.
Item 17:store newed 0bjects in smart pointers in standalone statements.
Chapter 4:Designs and Declarations
Item 18:Make interfaces easy t0 use correctly and hard t0 use incorrectly.
Item 19:Treat claSS design as type design.
Item 20:Prefer pass-by-reference-to-const t0 pass_by-value.
Item 21:Don’try to return a refefence when you must return an o bject.
Item 22:Declare data members private.
Item 23:Prefer non-member non-friend functions to member functions.
Item 24:Declare non-member functions when type
conversions shonld apply to a11 parameters.
Item 25:Consider SUpport for a non-throwing swap.
Chapter 5:Implementations
Item 26:P0stpone variable definitions as 10ng as possible.
Item 27:Minimize casting.
Item 28:Avoid returning“handles”to object internals.
Itam 29:strive for exception-safe code.
Item 30:Understand the ins and outs 0f inlining.
Item 31:Minimize compilation dependencies between files.
Chapter 6:Inheritance and 0bject一0riented Design
Item 32:Make sure public inheritance models“is-a.”
Item 33:Avoid hiding inherited names.
Item 34:DifieFentiate between inheritance of interface and
inheritance of implementation.
Item 35:COIlSider alternatives to virtual functions.
Item 36:Never redefine an inherited non-virtnal fLlnction.
Item 37: Never redefine a function's inherited default parameter value.
Item 38: Model "has-a" or is-implemented-in-terms-of' through composition.
Item 39: Use private inheritance judiciously.
Item 40: Use multiple inheritance judiciously.
Chapter 7: Templates and Generic Programming
Item 41: Understand implicit interfaces and compiletime polymorphism.
Item 42: Understand the two meanings of typename.
Item 43: Know how to access names in templatized base classes.
Item 44: Factor parameter-independent code out of templates.
Item 45: Use member function templates to accept "all compatible types."
Item 46: Define non-member functions inside templates
hen type conversions are desired.
Item 47: Use traits classes for information about types.
Item 48: Be aware of template metaprogramming.
Chapter 8: Customizing new and delete
Item 49: Understand the behavior of the new-handler.
Item 5o: Understand when it makes sense to replace new and delete.
Item 51: Adhere to convention when writing new and delete.
Item 52: Write placement delete if you write placement new.
Chapter 9: Miscellany
Item 53: Pay attention to compiler warnings.
Item 54: Familiarize yourself with the standard library, including TR1.
Item 55: Familiarize yourself with Boost.
Appendix A: Beyond Effective C++ 273
Appendix B: Item Mappings Between Second and Third Editions
Index