- 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-correctness
- Avoid type switching; prefer type safety
- Never 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).