gpt4 book ai didi

c++ - 对象替换自身是否合法?

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:09 25 4
gpt4 key购买 nike

我觉得这不是真正合法的或涉及未定义的行为,其中成员对象将自己替换为另一个实例。我在 StackOverflow 和 Google 上搜索了很长时间,发现主要是那些想要delete this; 的人。我不完全确定 delete this; 问题是否属于相同情况,因为我没有 new 我的实例并且我没有 delete 它。

我说得对吗?

如果我仍然需要代码来做这样的事情,有没有简单的方法解决这个问题?

struct Test;

struct Member {
void fail();
Test* test;
};

struct Test {
Test(): member() {
member.test = this;
}

void doStuff() {
member.fail();
}

Member member;
};

void Member::fail() {
test->member = Member(); // delete the object the current code is executing on
}

int main() {
Test bla;
bla.doStuff();
}

最佳答案

// delete the object the current code is executing on

不,它不会删除任何东西。

您所做的只是构造一个临时的 Member 对象,然后以该临时对象作为参数调用 *this 的复制赋值运算符。

从C++的角度来看,这不是对象的“替换”,也不是对象的“删除”。这只是一个成员函数调用。在这种情况下,唯一可观察到的结果是 test 在调用 fail() 后将被清空。

分配给对象对其生命周期没有影响。

现在,如果您开始尝试使用 deletenew,就会遇到问题。

关于c++ - 对象替换自身是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40222634/

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