Re[2]: Удаление полиморфного класса через контекст
От: Molchalnik  
Дата: 04.10.13 14:06
Оценка:
E>Посмотрев твой код, я так и не понял — ты в момент удаления знаешь тип? Или удаляешь по указателю на Object?

может быть и так, и так, или например так:

class XxxInterface : public Object{};

class Xxx : public XxxInterface {};

/*
...
некий код
*/

XxxInterface * p = Xxx::Create();
/*
...
некий код
*/

delete p; //или p->SelfDestruct(); в одной из архитектур



E>Если второе — то определенный для наследников delete тебе не поможет, нужен delete для Object, которому придется узнавать, как аллоцирован объект — в стандартном хипе или твоем собственном. Ну к примеру заведи в Object еще одну виртуальную функцию.


Как ты представляешь вызов виртуальной функции из delete? С учётом, что delete вызывается уже после деструктора. Надеятся на то, что таблица виртуальных функций после деструктора жива, ты не имеешь права (хотя что с ней будет?)

E>А вообще наиболее правильный вариант, имхо, вместо "чистых" указателей и new/delete использовать unique_ptr или shared_ptr. Оба позволяют сохранять делетеры и дергают их при удалении.


E>Таким образом ты отвяжешь способ удаления от типа и сможешь один и тот же тип создавать как в обычной куче, так и в твоей собственной.


Интересный вариант, спасибо



----------------------------

Ещё идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.