If a class THIS contains member variables that are pointers or class
objects that may contain pointers, you probably need to define the
constructor THIS::THIS(THIS&) and member function THIS::operator=(THIS&)
to handle the pointers properly on initialization and assignment.

Note also that operator= is not implicitly defined for a class derived
from a base class that defines operator=.

If an object may have dependents, it should have a destructor that calls
changed to notify its dependents that it is being destroyed, then calls
release().  If an object makes itself dependent upon other objects by
calling addDependent, it should have a destructor that calls
removeDependent to break these dependencies.

Be careful when defining constructors as inline.  Remember that an inline
constructor will generate inline code to construct the base class and any
member class variables, and this can amount to a lot of code and cause
problems for the C compiler.
