Orthodox Canonical Form
The above term is coined by James Coplien in this book Advanced C++ Programming Styles and Idioms, page 38 and further.
What is boils down to is that you should provide:
- a default constructor
- a copy constructor
- an assignment operator
- a destructor
to each non-trivial class you write.
Besides that, you must provide the above if
- you want to support assignment and want to pass objects by value to other functions and
- the objects contains pointers that are reference counted or the destructor performs a delete on a data member of the object.