gpt4 book ai didi

c++ - 显式删除和新建 vs 使用 unique_ptr

转载 作者:行者123 更新时间:2023-11-30 01:48:34 24 4
gpt4 key购买 nike

我有一个回调传递给异步函数,它只负责删除传递给异步函数的指针。我应该如何删除指针:

  1. 使用显式删除。
  2. 通过创建将删除对象的 unique_ptr。

对象的创建也有同样的问题 - 我应该使用 new 还是创建一个 unique_ptr 并立即释放它。

MyClass* myClass = make_unique<MyClass>().release();
AsyncFunc(myClass, [myClass](){std::unique_ptr<MyClass>(myClass)}

对比

MyClass* myClass = new MyClass();
AsyncFunc(myClass, [myClass](){delete myClass;)}

最佳答案

都没有。

你应该这样做......

auto myClass = make_unique<MyClass>();
// hand out pointers to myClass by using myClass.get() as needed
AsyncFunc([p = std::move(myClass)]{ p.reset(); });
// make sure any pointers to myClass you handed out are unused/gone
// by the time the async func is called

这样你就永远不会通过原始指针拥有所有权(你永远不应该这样做),并且 lambda 拥有 myClass 的所有权,因为它已经被 moved 到lambda 捕获。

您也可以省略 p.reset() 并让指针在 lambda 终止时终止,我假设(取决于 AsyncFunc)紧随其后lambda 被调用。

关于c++ - 显式删除和新建 vs 使用 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330297/

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