关于 c :Explicit delete and new vs using a unique_ptr

Explicit delete and new vs using a unique_ptr

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

  • 通过使用显式删除。
  • 通过创建一个将删除对象的 unique_ptr。
  • 对于对象的创建也有同样的问题 - 我应该使用 new 还是创建一个 unique_ptr 并立即释放它。

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

    vs

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


    都没有。

    你应该这样做……

    1
    2
    3
    4
    5
    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 之后立即发生的。