Re: Удаление полиморфного класса через контекст
От: enji  
Дата: 04.10.13 13:31
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Доброго времени суток, коллеги!!!


M>Такой нетиповой вопрос.


M>Есть сложная иерархия классов, наследуемых от одного чисто виртуального предка. Дерево наследования — произвольное, но сначала идут интерфейсы, а последний потомок любого дерева — имплементация. Имплементация содержит ссылку на кучу heap, или класс, который содержит в себе функции new и delete (будем называть их контекстом). Нужно удалить по ссылке на интерфейс имплементацию, но при этом удалить через контекст, в нужной куче или через нужные функции аллокации/деаллокации.


Посмотрев твой код, я так и не понял — ты в момент удаления знаешь тип? Или удаляешь по указателю на Object?

Если первое — то заводишь свои new / delete

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

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

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