Scott Meyers,is one of the world s foremost experts on C++ software development He is author of the best-selling Effective C++ series (Effective C++,More Effective C++,and Effective STL) ,designer and author of the innovative Effective C++ CD,consulting editor for Addison-Wesley s Effective Software Development Series;and a member of theadvisory board for Software Development magaxine.He has served on the technical advisory boards for seveal start-up companies Meyers received his Ph,D,ln computer science from Brown University in 1993.His web site is www.aristeia.com.
圖書目錄
Preface xv Acknowledgments xvii Introduction 1 Chapter 1:Accustoming Yourselft0 C++ 11 Item 1:View C++as a flederation oflanguages. 11 Item 2:Prefler consts,enums,and inlines to #defines. 13 Item 3:Use const whenever pOSSible.17 Item 4:Make sure that objects are initialized before they're used. 26 Chapter 2:C0nstI'Uctors,DestI'Uctors,and Assignment operators 34 Item 5:Know what functions C++silently writes and calls. 34 Item 6:Explicitly disanOW the use of compilergenerated functions yOH do not want. 37 Item 7:Declare destruetors virtual in polymorphic base dasses. 40 Item 8:Prevent exceptions flrom leaVing destructors. 44 Item 9:Never call Virtual functions during construetion Or destruction. 48 Item 10:Have assignment operators return a reference tO*this. 52 Item 11:Handle assignment to self in operator=. 53 Item 19:CoPY a11 parts 0fan 0bject. 57 Chapter 3:Resource ManageInent 61 Item 13:Use objects to manage resources. 61 Item 14:Think carefully about copying behavior in resource-managing cIasses. 66 Item 15:Provide access t0 raw resources in resourcemanaging classes.69 Item 16:Use the same form in corresponding uses 0f new and delete.73 Item 17:store newed 0bjects in smart pointers in standalone statements.75 Chapter 4:Designs and Declarations 78 Item 18:Make interfaces easy t0 use correctly and hard t0 use incorrectly. 78 Item 19:Treat claSS design as type design. 84 Item 20:Prefer pass-by-reference-to-const t0 pass_by-value. 86 Item 21:Don’try to return a refefence when you must return an o bject. 90 Item 22:Declare data members private. q4 Item 23:Prefer non-member non-friend functions to member functions. 98 Item 24:Declare non-member functions when type conversions shonld apply to a11 parameters. 102 Item 25:Consider SUpport for a non-throwing swap. 106 Chapter 5:Implementations 113 Item 26:P0stpone variable definitions as 10ng as possible. 113 Item 27:Minimize casting. 116 Item 28:Avoid returning“handles”to object internals. 123 Itam 29:strive for exception-safe code. 127 Item 30:Understand the ins and outs 0f inlining. 134 Item 31:Minimize compilation dependencies between files. 140 Chapter 6:Inheritance and 0bject一0riented Design 149 Item 32:Make sure public inheritance models“is-a.” 150 Item 33:Avoid hiding inherited names. 156 Item 34:DifieFentiate between inheritance of interface and inheritance of implementation.161 Item 35:COIlSider alternatives to virtual functions. 169 Item 36:Never redefine an inherited non-virtnal fLlnction. 178 Item 37: Never redefine a function's inherited default parameter value. 18o Item 38: Model "has-a" or is-implemented-in-terms-of' through composition. 184 Item 39: Use private inheritance judiciously. 187 Item 40: Use multiple inheritance judiciously. 192 Chapter 7: Templates and Generic Programming 199 Item 41: Understand implicit interfaces and compiletime polymorphism. 199 Item 42: Understand the two meanings of typename. 203 Item 43: Know how to access names in templatized base classes. 207 Item 44: Factor parameter-independent code out of templates. 219 Item 45: Use member function templates to accept "all compatible types." 218 Item 46: Define non-member functions inside templates when type conversions are desired. 222 Item 47: Use traits classes for information about types. 226 Item 48: Be aware of template metaprogramming. 233 Chapter 8: Customizing new and delete 939 Item 49: Understand the behavior of the new-handler. 240 Item 5o: Understand when it makes sense to replace new and delete. 247 Item 51: Adhere to convention when writing new and delete. 252 Item 52: Write placement delete if you write placement new. 256 Chapter 9: Miscellany 262 Item 53: Pay attention to compiler warnings. 262 Item 54: Familiarize yourself with the standard library, including TR1. 263 Item 55: Familiarize yourself with Boost. 269 Appendix A: Beyond Effective C++ 273 Appendix B: Item Mappings Between Second and Third Editions 977 Index 280