我有一个回调传递给一个异步函数,它只负责删除传递给异步函数的指针。 如何删除指针:显式删除和新vs使用unique_ptr
- 通过使用显式删除。
- 通过创建将删除对象的unique_ptr。
对于创建对象也有同样的问题 - 我应该使用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;)}
什么是'AsyncFunc'声明? –
如果'AsyncFunc'取得了'myClass'的内存所有权,那么它理想情况下应该接受一个'std :: unique_ptr'来在语义上表明它是这样做的。在这种情况下,您不需要传递回调来删除指针,只要'AsyncFunc'完成使用它就会被删除。然而,没有更多的信息,很难确定你想要达到的目标。 –
我认为不需要显式删除。我想知道你想要做什么。在传递给异步删除之前,该指针如何被创建和使用是很重要的。 std :: auto_ptr会做得很好。我认为你是从错误的一面解决它。从一开始就开始。 – Pihhan