class A {
....
};
class B: public A {
int x;
...
};
class C: public A{
A * ptr;
.....
};
class D : public A {
A* ptr1;
A* ptr2;
....
};
Примечание: Я сделал все конструкторы для B, C, D, просто не включил их там. Итак, A (без полей) - это суперкласс, и у меня есть 3 подкласса (B, C и D), каждый с разными полями.(C++) разрушение цепочки подкласса при вызове деструктора
А является абстрактным классом и его главным выстраивание класса (B, C, D)
Так как я мог бы ситуацию, как
B *x = new B {5};
B *x2 = new B {5}
D * y = new D{x,x2);
Так что, когда я delete y;
я хочу сделать он цепью разрушает 2 указателя двух своих полей, которые (объекты B). Как я могу сделать деструктор для класса D, а затем разрушить цепочку?
Как пример, который я показываю, очень просто, но в других примерах есть все больше и больше слоев. Я хочу убедиться, что все удалено, поэтому утечки памяти не происходят.
Должен ли мой dtor для класса D выглядеть так?
~D(){
delete ptr1;
delete ptr2;
}
и для случая класса C я бы просто сделал это?
~C(){
delete ptr;
}
Потому что я сделал это, и он не работает. Я получаю утечки памяти, так что не так?
Вы объявляете своего деструктора виртуальным? – Falmarri
для класса A №. Я думал, что могу переопределить, если бы сделал их в подклассе @Falmarri –
Должно ли это сделать виртуальный дескриптор класса A чисто виртуальным, и мне действительно не нужно делать деструкцию для класса B, он может просто использовать свой по умолчанию один правый? –