A CBase derived member variable has to be cleaned up correctly. If it is a member variable of another CBase derived class it has to be cleaned up in the class's destructor via a call to "delete iMember;" this works correctly without any checks independently if the pointer owns memory or is NULL.
CBase derived members are zero initialized during construction of the owning CBase derived class. If a non CBase derived class owns a CBase derived member the pointer has to be zero initialized explicitly (commonly in the constructors initialization list) and the owned resources have to be freed in a Release/Close function by a call to "delete iMember;".