If a class needs a custom copy constructor, copy
assignment operator, or destructor, it probably needs all three.Avoid hard-wiring information that needlessly makes
code more brittle and limits flexibility.Always make all data members private. The only exception
is the case of a C-style struct which isn't intended to
encapsulate anything and where all members are public.
Write (only) useful comments. Never write comments that
repeat the code; instead, write comments that explain the code and the reasons
why you wrote it that way.
Practice const-correctnessAvoid type switching; prefer type safetyNever use "underhanded names"—ones that
begin with an underscore or that contain a double underscore. They are reserved
for your compiler and standard library implementation.If you want to represent variant types, for now prefer
to use boost::any
(or something equally simple).