gpt4 book ai didi

c++ - 为什么非虚拟析构函数没有内存泄漏

转载 作者:行者123 更新时间:2023-12-03 11:15:03 25 4
gpt4 key购买 nike

被告知以下代码中没有B->b的内存泄漏:

    struct A {}; // no virtual destructor
struct B : public A {
int b;
}

int main() {
A* a = new B {};
delete a;
}

如果是真的,你能解释一下原因吗?

最佳答案

因为这就是未定义行为的工作方式。不保证内存泄漏。但也不能保证不泄漏。就语言而言,任何行为都是可能的。

why this is Undefined Behaviour

因为一个非虚析构函数是通过一个动态类型是另一个(派生)类型的指针来调用的。

whether anything concretely can be said about the lifetime of the B::b

嗯,它是 B 的成员,因此它与任何 B 对象具有相同的生命周期。至于动态 B 对象的生命周期,由于 UB,我们不能说太多。

关于c++ - 为什么非虚拟析构函数没有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65782061/

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