gpt4 book ai didi

c++ - `delete this;` 语句期间发生了什么?

转载 作者:IT王子 更新时间:2023-10-28 23:32:21 25 4
gpt4 key购买 nike

请考虑以下代码:

class foo
{
public:
foo(){}
~foo(){}
void done() { delete this;}
private:
int x;
};

在以下两个选项中发生了什么(它是否有效?):

选项 1:

void main()
{
foo* a = new foo();
a->done();
delete a;
}

选项 2:

void main()
{
foo a;
a.done();
}

选项 1 的第二个 delete a; 语句会导致异常或堆损坏吗?

选项 2 会导致异常或堆损坏吗?

最佳答案

delete this; 是允许的,它会删除对象。

您的两个代码片段都有未定义的行为 - 在第一种情况下删除已被删除的对象,在第二种情况下删除具有自动存储持续时间的对象。

由于行为未定义,标准没有说明它们是否会导致异常或堆损坏。对于不同的实现,它可能是,也可能不是,也可能两者都是,而且每次运行代码时它可能相同,也可能不同。

关于c++ - `delete this;` 语句期间发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8820293/

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