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>Таким образом ты отвяжешь способ удаления от типа и сможешь один и тот же тип создавать как в обычной куче, так и в твоей собственной.
Интересный вариант, спасибо
----------------------------
Ещё идеи?