我有一個回調傳遞給一個異步函數,它只負責刪除傳遞給異步函數的指針。 如何刪除指針:顯式刪除和新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