Можно ли вызвать деструктор объекта без знания типа класса без использования delete
? Я спрашиваю, потому что я работаю над распределителем (для удовольствия/практики), и я использую malloc
/размещение new
для создания объекта, но затем, когда я иду на уничтожение объекта, мне было любопытно, если бы был способ сделать это без зная тип. Если это невозможно, почему бы и нет? Это единственный способ сделать это, как я показываю в своем примере кода (который прокомментирован)?Можно ли вызвать деструктор, не зная тип?
#include <stdio.h>
#include <new>
void* SomeAllocationFunction(size_t size) {
return malloc(size);
}
class SomeClass{
public:
SomeClass() {
printf("Constructed\n");
}
~SomeClass() {
printf("Destructed\n");
}
};
int main(void){
void* mem = SomeAllocationFunction(sizeof(SomeClass));
SomeClass* t = new(mem)SomeClass;
free(t);
//t->~SomeClass(); // This will call the destructor, is it possible to do this without knowing the class?
return 0;
}
(я знаю, что могу просто позвонить удалить, но не обращайте внимания, что на данный момент.)
Единственный способ назвать класс конкретными функция, не зная класса во время компиляции, - это если в каждом экземпляре имеется определенная информация о конкретном классе, которая может использоваться для выполнения поиска во время выполнения (аналогично концепции vtbl). Это вообще не так. –
Когда вы в конечном итоге вызываете 't-> ~ SomeClass()', вы обязательно захотите сделать это * перед * 'free (t)'. –
@Greg Hewgill: Это был только что прокомментированный код, я не хотел путать с приказом. – mmurphy