C>Можно ли имея указатель на произвольный класс (зная о классе только то, что у него есть виртуальный деструктор), получить указатель на этот деструтор и вызвать его?
C>Я предположил, что указатель на вирт. деструктор располагается в vTable где-то в определённом месте. К тому же деструеторы не имеют параметров. Значит можно реализовать такую функцию:
C>void DeleteObject(void* object_pointer)
C>{
C> call_destructor(object_pointer); // ХЗ как это сделать
C> free(object_pointer);
C>}
C>Это было бы очень полезно в случае класса CUnknown:
C>вместоC>template<class T>
C>class CUnknown
C>{
C> CUnknown(T* pObj)
C> virtual void AddRef() { ... } // Исплементация виртуальной функции темплейтного класса
C> virtual void Release() { ... } // Хреновый код!
C>}
можно было быC>class CUnknown
C>{
C> CUnknown(void* pObj);
C> virtual void AddRef(); // Реализация единственна и в .CPP
C> virtual void Release(); // Хороший код!
C>};
C>
Поскольку классу CUnknown требуется только УДАЛЕНИЕ объекта по указателю pObj
Можно унаследовать классы всех объектов используемых с CUnknown от обшего класса с пустым виртуальным деструктором. И преобразовывать не в void* a в указатель на этот класс и т.д. Переносимо, единственное размер обектов увеличится на размер указателя.