1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
template< typename T, typename TDestroyer >
void
utilspp::setLibraryLongevity( T *obj, unsigned int longevity, TDestroyer d )
{
using namespace utilspp::PrivateMembers;
LifetimeTracker *p = new ConcreteLifetimeTracker< T, TDestroyer >(
obj, longevity, d);
utilspp::LifetimeLibrarySingleton::instance().add( p );
};
template< typename T >
void
utilspp::LifetimeLibrary< T >::scheduleDestruction( T *obj, void (*func)() )
{
utilspp::PrivateMembers::adapter<T> adapter = { func };
utilspp::setLibraryLongevity( obj, getLongevity( obj ), adapter );
}
template< typename T >
void
utilspp::LifetimeLibrary< T >::onDeadReference()
{
throw std::logic_error("Dead reference detected");
}
template< typename T >
utilspp::LifetimeLibraryGuard< T >::~LifetimeLibraryGuard()
{
T::instance().terminate();
}
|