Re: Указатель на деструктор
От: Piter  
Дата: 05.08.04 15:50
Оценка:
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 в указатель на этот класс и т.д. Переносимо, единственное размер обектов увеличится на размер указателя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.