📄 lifetimewithlongevity.inl
字号:
template< typename T, typename TDestroyer >voidutilspp::setLongevity( T *obj, unsigned int longevity, TDestroyer d ){ using namespace utilspp::PrivateMembers; TrackerArray newArray = static_cast< TrackerArray >( std::realloc(mTrackerArray, mNbElements + 1)); if( newArray == NULL ) { throw std::bad_alloc(); } LifetimeTracker *p = new ConcreteLifetimeTracker< T, TDestroyer >(obj, longevity, d); mTrackerArray = newArray; TrackerArray pos = std::upper_bound( mTrackerArray, mTrackerArray + mNbElements, p, &LifetimeTracker::compare); std::copy_backward( pos, mTrackerArray + mNbElements, mTrackerArray + mNbElements + 1); *pos = p; mNbElements++; std::atexit( &atExitFunc );}template< typename T >void utilspp::LifetimeWithLongevity< T >::scheduleDestruction( T *obj, void (*func)() ){ utilspp::PrivateMembers::adapter<T> adapter = { func }; utilspp::setLongevity( obj, getLongevity( obj ), adapter );}template< typename T >void utilspp::LifetimeWithLongevity< T >::onDeadReference(){ throw std::logic_error("Dead reference detected");}template< typename T >unsigned int utilspp::getLongevity( T * ){ return 1000;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -