Effective C++ Contents


  Item 1:      Prefer const and inline to #define.
Item 2:Prefer <iostream> to <stdio.h>.
Item 3:Prefer new and delete to malloc and free.
Item 4:Prefer C++-style comments.

 
Item 5:Use the same form in corresponding uses of newand delete.
Item 6:Use delete on pointer members in destructors.
Item 7:Be prepared for out-of-memory conditions.
Item 8:Adhere to convention when writing operator newand operator delete.
Item 9:Avoid hiding the "normal" form of new.
Item 10:Write operator delete if you write operator new.

 
Item 11:Declare a copy constructor and an assignment operator for classes with dynamically allocated memory.
Item 12:Prefer initialization to assignment in constructors.
Item 13:List members in an initialization list in the order in which they are declared.
Item 14:Make sure base classes have virtual destructors.
Item 15:Have operator= return a reference to *this.
Item 16:Assign to all data members in operator=.
Item 17:Check for assignment to self in operator=.

 
Item 18:Strive for class interfaces that are complete and minimal.
Item 19:Differentiate among member functions, non-member functions, and friend functions.
Item 20:Avoid data members in the public interface.
Item 21:Use const whenever possible.
Item 22:Prefer pass-by-reference to pass-by-value.
Item 23:Don't try to return a reference when you must return an object.
Item 24:Choose carefully between function overloading and parameter defaulting.
Item 25:Avoid overloading on a pointer and a numerical type.
Item 26:Guard against potential ambiguity.
Item 27:Explicitly disallow use of implicitly generated member functions you don't want.
Item 28:Partition the global namespace.

 
Item 29:Avoid returning "handles" to internal data.
Item 30:Avoid member functions that return non-constpointers or references to members less accessible than themselves.
Item 31:Never return a reference to a local object or to a dereferenced pointer initialized by new within the function.
Item 32:Postpone variable definitions as long as possible.
Item 33:Use inlining judiciously.
Item 34:Minimize compilation dependencies between files.

 
Item 35:Make sure public inheritance models "isa."
Item 36:Differentiate between inheritance of interface and inheritance of implementation.
Item 37:Never redefine an inherited nonvirtual function.
Item 38:Never redefine an inherited default parameter value.
Item 39:Avoid casts down the inheritance hierarchy.
Item 40:Model "has-a" or "is-implemented-in-terms-of" through layering.
Item 41:Differentiate between inheritance and templates.
Item 42:Use private inheritance judiciously.
Item 43:Use multiple inheritance judiciously.
Item 44:Say what you mean; understand what you're saying.

 
Item 45:Know what functions C++ silently writes and calls.
Item 46:Prefer compile-time and link-time errors to runtime errors.
Item 47:Ensure that non-local static objects are initialized before they're used.
Item 48:Pay attention to compiler warnings.
Item 49:Familiarize yourself with the standard library.
Item 50:Improve your understanding of C++.