This document describes cleanup actions required for C type and other classes.
For C type classes, cleanup invokes the destructor. For other types of object, other actions may be required.
The destructor for C type classes must be coded to release all resources owned by the object. By definition, cleanup may occur on partially constructed objects: the destructor may not, therefore, assume that all conditions for a fully-constructed object hold in these circumstances. A typical situation to watch for is calling a member function on a pointer that is initialized in the ConstructL(), as the pointer could be NULL in failure cases.
Resources will usually be indicated by pointers or handles. It is important that such pointers or handles are null when there is no resource allocated, and that the destructor test for a non-null value before destroying them.
This behaviour is facilitated in CBase -derived classes, because their memory is guaranteed to be initially set to binary zeroes when they are first allocated.
Programmers must, however, take particular care with pointers which are used for owned objects which are repeatedly allocated and de-allocated throughout an object’s lifetime. When such owned objects are de-allocated, the pointer should always immediately be set to null.