2014-01-27 5 views
1

Итак, я написал свой собственный класс управления памятью.C++ явный вызов деструктора через базовый указатель

По существу, он выделяет большой блок памяти через таНос, то по запросу он сдает памяти в запрашивающей в программе (as you would expect.)

Я также осуществил templated распределение и свободные функции, которые явно вызывает конструктор и destructor на основе класса templatized.

Проблема, как вы уже поняли, это о том, когда я пытаюсь удалить с помощью базового указателя?

Функция templated выбирает тип базового класса, и, таким образом, вызывается базовый виртуальный destructor, а не правильный вывод destructor.

Возможно, не удалено место размещения или что-либо, что будет функционировать как обычная команда «удалить», но не попытка deallocate памяти?

+1

Казалось у вас нет перегрузки новых/удаления в вашем базовом классе –

+1

Показать код. –

+0

, возможно, взгляните на это сообщение SO http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors –

ответ

2

Вы хотите просто вызвать деструктор, что-то вроде:

myObjPtr-> ~ MyClass()

+0

Да, я прямо называю деструктор, но он имеет базу, так как это то, что темплатируется по указателю, который прошел. Например: класс A { общественный: виртуальный ~ A(); }; класс B: общественный A { общественность: ~ B() {} }; void main (void) { void * pMem = malloc (sizeof (B)); A * a = новый (pMem) B(); // Предположим, что мы явно не знаем, что находится в 'a' в этой точке. a-> ~ A(); } Это, очевидно, чрезвычайно упрощенный пример, но вы поняли суть. – XxHoboRampagexX

+0

Весь этот текст был чрезвычайно отформатирован, когда я отправил его. – XxHoboRampagexX

+1

@ user3239404 просто: 'A * p = new B(); p-> ~ A(); 'будет вызывать' p-> ~ B() ', поскольку' ~ A() 'является' virtual'. –

Смежные вопросы