Consider the following code:
class A
{
public:
A() {}
~A() {}
};
class B: public A
{
B() {}
~B() {}
};
A* b = new B;
delete b; // undefined behaviour
我的理解是,C++标准规定删除b是未定义的行为 - 也就是说,任何事情都可能发生。但在现实世界中,我的经验是~A() 总是被调用,并且内存被正确释放。
如果B引入了任何具有自己析构函数的类成员,它们将不会被调用,但我只对上述简单情况感兴趣,在这种情况下,继承可能用于修复无法获得源代码的一个类方法中的错误。
显然,在非平凡的情况下,这并不是您想要的,但至少是一致的。您是否知道上述代码中是否存在任何C++实现不会发生这种情况?
~B
被调用,然后是~A
,最后释放sizeof(B)
内存。 - Mark Ransom