我有一个回调传递给异步函数,该函数只负责删除传递给异步函数的指针。 我该如何删除指针:
同样的问题也是对象的创建 - 我应该使用new还是创建unique_ptr并立即释放它。
MyClass* myClass = make_unique<MyClass>().release();
AsyncFunc(myClass, [myClass](){std::unique_ptr<MyClass>(myClass)}
VS
MyClass* myClass = new MyClass();
AsyncFunc(myClass, [myClass](){delete myClass;)}
答案 0 :(得分:4)
都不是。
你应该这样做......
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
的所有权,因为它已经move
进入lambda捕获。
你也可以省略p.reset()
并让指针在lambda死亡时死亡,我认为(取决于AsyncFunc
)就在lambda被调用之后。