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