//Безопасное удаление template<typename T> inline void SafeDelete( T*& p ) { // Проверка, что тип полностью определен typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; (void) sizeof(type_must_be_complete); // проверять p на равенство нулю не нужно, т.к. стандарт // гарантирует корректную работу delete delete p; p = NULL; }Если нет запрета на использование boost, то лучше использовать boost::checked_delete.
// Безопасное удаление через Release template<typename T, typename D> inline void SafeRelease( T*& p, D d ) { if ( p != NULL ) { (p->*d)(); p = NULL; } } template<typename T> inline void SafeRelease( T*& p) { return SafeRelease( p, &T::Release ); }
UPD:22 окт добавлена проверка на то, что тип является полностью определенным.