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是的,但是派生类析构函数也释放了一些内存。 –
这肯定会发生。但我在谈论派生类析构函数不需要明确释放任何东西的情况。 –