考虑以下代码:
class A
{
public:
A() {}
~A() {}
};
class B: public A
{
B() {}
~B() {}
};
A* b = new B;
delete b; // undefined behaviour
我的理解是,C++ 标准说删除 b 是未定义的行为 - 即,anything可能会发生。但是,在现实世界中,我的经验是 ~A() 是always调用,并且内存被正确释放。
如果 B 引入任何具有自己的析构函数的类成员,它们将不会被调用,但我只对上面的简单情况感兴趣,其中继承可能用于修复源代码为的一个类方法中的错误不可用。
显然,在重要的情况下这不会是您想要的,但它至少是一致的。你知道吗any对于所示的代码,C++ 实现中上述情况不会发生?
这是C++标签中一个永无止境的问题:“什么是可预测的未定义行为”。自己轻松解决:得到everyC++ 编译器实现并检查可预测的不可预测的是否仍然有效。然而,这是您必须自己做的事情。
请发回您发现的内容,这将非常有用。只要不可预测的事物具有全面一致且带注释的行为。对于编写 C++ 编译器的人来说,很难让任何人关注他的产品。按照惯例进行标准化,发生了lot用一种具有lot未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)