CleanupReleasePushL() pushes a TCleanupItem onto the cleanup stack ready for CleanupStack::PopAndDestroy() to release.
The CleanupReleasePushL() templated function constructs and pushes a TCleanupItem onto the cleanup stack. When CleanupStack::PopAndDestroy() is called, the Release() member function of the object encapsulated by the TCleanupItem is called.
... RTestThree three; CleanupReleasePushL(three); ... CleanupStack::PopAndDestroy(); ...
The TCleanupItem object encapsulates a reference to the RTestThree object; the cleanup operation is the static function Release() of the templated class CleanupRelease<class T>. This is implemented by simply calling the Release() member function of RTestThree. This means that RTestThree must define or inherit a member function Release() which performs whatever clean up is required.