Звучит так, будто вы используете оператор delete как обычную функцию, которая должна делать произвольные вещи. Оператор delete, однако, предназначен только для освобождения памяти, выделенной ему в качестве первого аргумента, который является указателем на эту область памяти.
Этот указатель будет указывать на область памяти, где находился ваш объект. В это время, однако, деструктор вашего объекта уже запущен, и ваш объект больше не существует. Вы вообще не можете вызывать какие-либо функции-члены, даже виртуальные функции!
У меня такое ощущение, что цель оператора удалить неправильно. Если вы вызываете delete pointer
, компилятор вызывает деструктор для объекта, а затем вызывает функцию освобождения, чтобы освободить выделенную память, которая называется operator delete
.
Ну, почему бы не использовать решение, которое мы показали вам ранее, с boost::shared_ptr
?