it is safe. Basically objects also needs to be derived from CBase, so their destructor will be called.
Basically the cleanup stack, just calls the cleanup object made form the class, and if the calss is derived from CBase it will call its destructor. And if not the cleanup will be simple free operation.
So in case your classes are experiencing problems, check the derivation thing, and if you can not use CBase as a base for your class, make your own cleanup object for it, so the cleanup stack will work correctly.