gpt4 book ai didi

c++ - 非虚拟析构函数的未定义行为 - 这是一个现实世界的问题吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:02 24 4
gpt4 key购买 nike

考虑以下代码:

class A 
{
public:
A() {}
~A() {}
};

class B: public A
{
B() {}
~B() {}
};

A* b = new B;
delete b; // undefined behaviour

我的理解是,C++ 标准规定删除 b 是未定义的行为 - 即,任何事情 都可能发生。但是,在现实世界中,我的经验是 ~A() 总是被调用,并且内存被正确释放。

如果 B 引入任何具有自己的析构函数的类成员,它们将不会被调用,但我只对上面的简单情况感兴趣,其中使用继承可能会修复一个类方法中的错误源代码不可用。

显然,这不会是您在非平凡情况下想要的,但它至少是一致的。对于显示的代码,您是否知道任何 C++ 实现都不会发生上述情况?

最佳答案

这是C++标签中一个永无止境的问题:“什么是可预测的未定义行为”。自己轻松解决所有问题:获取每个 C++ 编译器实现并检查可预测的不可预测的是否仍然有效。然而,这是您必须自己做的事情。

请发回您发现的内容,了解这些内容会非常有用。只要不可预测的具有全面的一致和带注释的行为。对于编写 C++ 编译器的人来说,很难让任何人关注他的产品。按照惯例,标准化很多发生在具有很多未定义行为的语言中。

关于c++ - 非虚拟析构函数的未定义行为 - 这是一个现实世界的问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com