Указатель на деструктор
От: Chez Россия  
Дата: 05.08.04 14:43
Оценка:
Можно ли имея указатель на произвольный класс (зная о классе только то, что у него есть виртуальный деструктор), получить указатель на этот деструтор и вызвать его?

Я предположил, что указатель на вирт. деструктор располагается в vTable где-то в определённом месте. К тому же деструеторы не имеют параметров. Значит можно реализовать такую функцию:
void DeleteObject(void* object_pointer)
{
   call_destructor(object_pointer); // ХЗ как это сделать
     free(object_pointer);
}

Это было бы очень полезно в случае класса CUnknown:
вместо
template<class T>
class CUnknown
{
    CUnknown(T* pObj)
    virtual void AddRef() { ... }   // Исплементация виртуальной функции темплейтного класса
    virtual void Release() { ... }  // Хреновый код!
}
можно было бы
class CUnknown
{
    CUnknown(void* pObj);
    virtual void AddRef(); // Реализация единственна и в .CPP
    virtual void Release(); // Хороший код!
};
Поскольку классу CUnknown требуется только УДАЛЕНИЕ объекта по указателю pObj

Кто глубоко ковырял компиляторы, может знает ответ?..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.