Я видел это раньше, но не ясно или в той же ситуации, с которой я столкнулся.C++ Не абстрактное наследование деструктора
У меня есть базовый базовый класс. Он имеет защищенный конструктор и деструктор. Он наследуется несколькими полными типами, которые также имеют публичные конструкторы и деструкторы. У меня возникла проблема, когда удаление объекта не вызывает дочерние деструкторы, если на объект ссылается базовый тип.
class Tree
{
protected:
Tree(){ }
public:
~Tree(){ }
};
class OakTree : public Tree
{
public:
OakTree(){ }
~OakTree(){ }
};
vector<Tree*> Trees; // Store objects using the base type
Trees.push_back(new OakTree()); // Create derived object
delete Trees[0]; // OakTree desctructor does not get called
Как я могу назвать деструктор OakTree? Я пробовал отмечать все деструкторы виртуальными, но это не сработало. Деструктор базового класса не может быть абстрактным (это позволит решить проблему вызова, но не проблему удаления).
К сожалению, у меня была ошибка в пределах одного из деструкторов, вызывающих его, чтобы показать утечку памяти на моем дампа памяти заставляет меня думать, деструктор не был вызван. Я был на 99% уверен, что деструкторы должны были быть виртуальными в этом случае, но я использовал их как виртуальные, но это не помогло решить проблему утечки памяти. Небрежно с моей стороны, кроме +1 для ваших ответов. –