How to clean up non-CBase classes

Cleanup for a TAny*

This example code shows cleanup for a TAny*, in this case a TText.

TText* buffer=(TText*) User::Alloc(100*sizeof(TText)); 
// create a buffer 
// push it to the cleanup stack: treated as TAny*
TPtr8 bufferPtr(buffer,100);  // create a pointer to the buffer
// use the buffer
// destroy the buffer on the cleanup stack

Cleanup support for an R class

This example code shows how to provide cleanup stack support for an R class. To do this, a TCleanupItem object must be constructed with a pointer to the object to clean up, and a pointer to a function that provides cleanup for that object. The most effective way to do this is to define a TCleanupItem cast operator in the class.

// TCleanupItem operator for objects of this class
RExampleClass::operator TCleanupItem()
 return TCleanupItem(Cleanup,this);
// cleanup function for use by cleanup stack
static void RExampleClass::Cleanup(TAny *aPtr)
 // Invoke the Close member on the RExampleClass at aPtr
 testConsole.Printf(_L("Doing cleanup.\n"));

// Show use
void DoTheExampleL()
 RExampleClass r;
 // Because RExampleClass has an operator TCleanupItem()
 // pushing it is OK

 // ...use r
 // possibly some operations that leave

 // PopAndDestroy() invokes RExampleClass::Cleanup()


  • The operator returns a TCleanupItem object which is constructed from a pointer to the static member function which performs the class’s cleanup processing, and a pointer to the object to be cleaned up.

  • The static member function which provides the class’s cleanup processing must cast the TAny* pointer into a pointer of the class to be cleaned up. This allows the class member function to perform the cleanup

  • CleanupStack::PopAndDestroy() removes the item from the cleanupstack and invokes the cleanup function defined in the TCleanupItem object.

  • Remember that the TCleanupItem does not go onto the cleanupstack. the TCleanupItem is a container for the object that goes onto the cleanupstack. In this example, a pointer to the RExampleClass is put on the cleanupstack.