The cleanup stack supports other types of cleanup using CleanupStack::PushL()
.
The discussion of clean up so far has assumed objects to be cleaned up
are derived from CBase
, with clean up by invoking delete
.
Other classes need explicit cleanup support to be provided by the programmer.
The cleanup stack supports other types of cleanup. You can push:
a pointer to any type
of object. This is an object of type TAny*
. The cleanupstack
destroys this type of object with a call to User::Free()
on
the pointer pushed. This is less powerful than standard cleanup, because it
frees memory and does not call the C++ destructor.
You use the CleanupStack::PushL(TAny*
aPtr);
overload.
a pointer to an object
together with a specific cleanup operation for that object. The pointer and
the cleanup operation are contained in a TCleanupItem
object.
You
use the CleanupStack::PushL(TCleanupItem anItem)
overload.
You
must understand that the TCleanupItem
object does not go
on the cleanupstack. The pointer to the object that is contained within the TCleanupItem
object
goes on the cleanupstack. For example, if you created a TCleanupItem called
myCleanupItem, you must never call CleanupStack::Pop(myCleanupItem);
Some utility functions are provided that make construction of a suitable TCleanupItem
easy.
See How to clean up
non-CBase classes.