вызова деструктора
есть конструкция
struct A {
int x;
A(int a) : x(a) {};
};
struct B : A {
int n;
B(int b) : A(b), n(b) {};
};
после чего в мейне
B *b = new B(10);
A *a = b;
delete a;
так вот, чего я не понимаю - так это почему в таком случае нет утечки (конкретно у меня), как если бы было в случае с дополнительными членами в наследуемом обьекте или же если бы там был не инт, а скажем стринг
оба обьекта находятся под одним адресом, но их члены - под разными же, в следствии чего удалится только x, но не n
это оптимизация компилятора (если да, то как ее отключить, чтоб проверить) или что-то еще?
Деструктор виртуальный?
нет, в том и дело, деструктор вызывается только базового класса
тогда твой вопрос не понятен, чем тебе отсутствие вызова деструктора наследника не утечка
если вместо int туда закинуть какой-нибудь свой класс с выводом в деструкторе - он тоже удалится только 1 раз
я о том, что ее отловить не могу
всё ещё не понятно)
Обсуждают сегодня