Можно ли имея указатель на произвольный класс (зная о классе только то, что у него есть виртуальный деструктор), получить указатель на этот деструтор и вызвать его?
Я предположил, что указатель на вирт. деструктор располагается в 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
Кто глубоко ковырял компиляторы, может знает ответ?..