class A
{
public:
int i;
~A()
{
std::cout << "~A" << std::endl;
}
};
class B: public A
{
public:
int k;
~B()
{
std::cout << "~B" << std::endl;
}
};
int main(int argc, char* argv[])
{
A* p = new B();
delete p;
return 0;
}
Вышеупомянутое не вызывает утечки памяти, хотя базовый деструктор не является виртуальным, и я знаю причину.Это неопределенное поведение или нет?
Но это неопределенное поведение или нет?
Скажем, утечки памяти не произойдет, если производный класс не указывает на другие динамические данные, хотя базовый деструктор не является виртуальным?
Вы когда-нибудь встречали такой код (производный класс не указывал на динамические данные) вызывали утечки? –
@new_perl да, я сделал, но деструктор производного класса также освободил некоторую память. –
Это обязательно произойдет. Но я говорю о том, что деструктор производного класса не нуждается в свободном явлении явно. –