Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.
A C class is one derived from class CBase.
The CBase class has the following main characteristics:
- Data members are always zeroed upon construction if an object is created on the heap because operator new() is overloaded.
- CBase has a virtual destructor
- CBase has private copy constructor and assignment operator
Thus, the following characteristics of C classes arise:
- They should always be allocated on the heap to ensure zero-initialization.
- They inherit the virtual destructor of the base class, so can be guaranteed to be cleaned up correctly.
- They need an explicit copy constructor or assignment operator if there is clear intention that a particular class will support copying
C classes typically have ownership of other C classes or resources that need cleanup. Since these resources often have non-trivial construction and, because of the possibility that a leave might occur during the construction process, C classes typically use the two-phase construction idiom.
- It is good practice that any class that derives from other non ‘C’ classes lists its base classes in the correct order. CBase or a CBase-derived class should be the first base class in the list:
class CCustomClass : public CBase, public MClass1
or, for a class further down the inheritance tree:
class CAnotherClass : public CCustomClass, public MClass2
This will emphasize the primary inheritance tree. If any other class is the first base class, you may have problems when using the cleanup stack.