gpt4 book ai didi

c++ - 如何删除已解除引用的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:44 27 4
gpt4 key购买 nike

我有以下代码

MyObject * func1() {
MyObject * obj = new MyObject();
// lots of stuff here
return obj;
}

MyObject func2() {
MyObject * obj = func1();
// even more stuff here
return *obj;
}

void main() {
MyObject obj = func2()
}

我从 here 得到的此代码正在泄漏。这会不会:

MyObject * func1() {
MyObject * obj = new MyObject();
// lots of stuff here
return obj;
}

MyObject func2() {
MyObject * obj = func1();
// even more stuff here
MyObject obj_r(*obj);
delete obj;
return obj_r;
}

void main() {
MyObject obj = func2()
}

解决问题?或者还有其他一些不错的解决方案吗?

在 b4 中:不,我不能从头开始引用它,因为 func1() 在某些情况下会返回 NULL。

更新:添加了一些评论,这样人们就不会认为我很愚蠢

最佳答案

一个更优雅(也更“正确”)的解决方案是使用智能指针:

MyObject func2()
{
return *std::auto_ptr<MyObject>(func1());
}

(对于更现代的编译器,使用 std::unique_ptr。或者如果您正在使用Boost,你也可以使用boost::scoped_ptr。)

我说的更“正确”,因为如果 MyObject 的复制构造函数抛出异常,这个解决方案仍然会删除对象,其中因为你的会泄漏。

关于c++ - 如何删除已解除引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7120724/

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