Abstract: This definitive guide to C++ has been updated to reflect the latest ANSI/ISO standard.
Keywords: book review, programming, C++ computer program language, style, memory management, constructors, destructors, assignment operators, inheritance, object-oriented design.
book cover
Title: Effective C++: 50 Specific Ways to Improve Your Programs and Designs, Second Edition
Author: Scott Meyers
Publisher: Addison-Wesley
Date Published: August 1997
ISBN: 0201924889
LOCN: QA76.73.C153M48 1998
Dewey: 005.13/3 21
Pages: 256
Click below to buy the book
[Book price/availability varies]
Buy from Amazon



REVIEW of 1992 Edition by Orville R. Weyrich, Jr.

This book and its companion, More Effective C++ , contain a wealth of intermediate to advanced advice on C++ program design and coding, which is useful both as a learning tool and as a code review checklist. I found the first edition of this book to be invaluable on previous programming projects, and before I embark on another new C++ project I will be buying a copy of the second edition. 'Nuff said.


The contents of the 1992 edition follow. The latest edition is not yet in hand.



Shifting from C to C++

Item 1: Use const and inline instead of #define.

Item 2: Prefer iostream.h to stdio.h.

Item 3: Use new and delete instead of malloc and free.

Item 4: Prefer C++ -style comments.

Memory Management

Item 5: Use the same form in corresponding calls to new and delete.

Item 6: Call delete on pointer members in destructors.

Item 7: Check the return value of new.

Item 8: Adhere to convention when writing new.

Item 9: Avoid hiding the global new.

Item 10:Write delete if you write new.

Constructors, Destructors, and Assignment Operators

Item 11: Define 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 destructors virtual in base classes.

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=.

Classes and Functions: Design and Declaration

Item 18: Strive for class interfaces that are complete and minimal.

Item 19: Differentiate among member functions, global functions, and friend functions.

Item 20: Avoid data members in the public interface.

Item 21: Use const whenever possible.

Item 22: Pass and return objects by reference instead of 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: Use structs to partition the global namespace.

Classes and Functions: Implementation

Item 29: Avoid returning "handles" to internal data from const member functions.

Item 30: Avoid member functions that return pointers or references to members less accessible than themselves.

Item 31: Never return a reference to a local object or a dereferenced pointer initialized by new within the function.

Item 32: Use enums for integral class constants.

Item 33: Use inlining judiciously.

Item 34: Minimize compilation dependencies between files.

Inheritance and Object-Oriented Design

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: Use private inheritance judicially.

Item 42: Differentiate between inheritance and templates.

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 global objects are initialized before they're used.

Item 48: Pay attention to compiler warnings.

Item 49: Plan for coming language features.

Item 50: Read the ARM.


Author:        Meyers, Scott (Scott Douglas)
Title:         Effective C++ : 50 specific ways to improve your
                  programs and designs / Scott Meyers.
Edition:       2nd ed.
Published:     Reading, Mass. : Addison-Wesley, c1998.
Description:   xx, 256 p. ; 24 cm.
Series:        Addison-Wesley professional computing series
LC Call No.:   QA76.73.C153M48 1998
Dewey No.:     005.13/3 21
ISBN:          0201924889
Notes:         Includes index.
Subjects:      C++ (Computer program language)
Control No.:   97024041 


I have taken this program and I highly recommend it to all health-care providers - Orville R. Weyrich, Jr PhD NMD.
Functional Diagnostic Medicine banner ad
For more information, see: The CSI Report and Video and Become a New Patient Magnet

Copyright © 1998     Orville R. Weyrich, Jr.