Explicit delete and new vs using a 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 拥有
您也可以省略
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268959.html