Rod*_*ddy 4 c++ destructor undefined-behavior
请考虑以下代码:
class A
{
public:
A() {}
~A() {}
};
class B: public A
{
B() {}
~B() {}
};
A* b = new B;
delete b; // undefined behaviour
Run Code Online (Sandbox Code Playgroud)
我的理解是C++标准说删除b是未定义的行为 - 即,任何事情都可能发生.但是,在现实世界中,我的经验是始终调用~A(),并正确释放内存.
如果B引入任何具有自己的析构函数的类成员,它们将不会被调用,但我只对上面的简单案例感兴趣,其中使用继承可能修复一个类方法中的错误,源代码是不可用.
显然,这不是你想要的非平凡情况,但它至少是一致的.对于显示的代码,您是否了解上述情况未发生的任何 C++实现?
这是C++标签中一个永无止境的问题:"什么是可预测的未定义行为".易于自行解决:获取每个 C++编译器实现并检查可预测的不可预测性是否仍然有效.然而,这是你必须自己做的事情.
回发你发现的内容,知道这些内容非常有用.只要不可预测的内容具有一致且注释的行为.这使得编写C++编译器的人很难让任何人关注他的产品.按惯例标准化,使用具有大量未定义行为的语言会发生很多.
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |