#include <e32base.h>
template< class T >
class CleanupResetAndDestroy
{
public:
inline static void PushL( T& aRef );
private:
static void ResetAndDestroy( TAny *aPtr );
};
template< class T >
inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
{
CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
}
template< class T >
inline void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny* aPtr )
{
T* ptr = static_cast<T*>( aPtr );
ptr->ResetAndDestroy();
ptr->Close();
}
template< class T >
void CleanupResetAndDestroyPushL( T& aRef )
{
CleanupResetAndDestroy<T>::PushL( aRef );
}