使用unique_ptr显式delete和new vs
Explicit delete and new vs using a unique_ptr
我有一个传递给async函数的回调,它只负责删除传递给async函数的指针。如何删除指针:
- 通过创建一个unique_ptr来删除对象。
同样的问题也适用于对象的创建——我应该使用new还是创建一个unique_ptr并立即释放它?
MyClass* myClass = make_unique<MyClass>().release();
AsyncFunc(myClass, [myClass](){std::unique_ptr<MyClass>(myClass)}
和
MyClass* myClass = new MyClass();
AsyncFunc(myClass, [myClass](){delete myClass;)}
都不是
你应该这样做…
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
d进入lambda捕获。
您也可以省略p.reset()
并在lambda死亡时让指针死亡,我假设(取决于AsyncFunc
)是在lambda被调用之后立即死亡。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- char array[sizeof(Message)]; vs char* array = new char[sizeo
- Malloc vs New for Primitives
- C++ VS:多 DLL 解决方案中的'new'和'delete'覆盖
- Calloc vs new 用于各种编译器中的复杂结构
- C++ std::vector<> vs new[] 性能
- CDialog *m_pages[6]; vs CDialog *m_pages = new CDialog[6];?
- void* in malloc vs operator new
- std::shared_ptr 初始化:make_shared<Foo>() vs shared_ptr<T>(new Foo)
- new int[size] vs std::vector
- LocalAlloc Vs GlobalAlloc Vs malloc Vs new
- new vs *new in C++
- 类重载new和delete vs放置new与定制的内存类
- new vs. new (featuring malloc!)
- 多维数组——malloc vs new
- 使用unique_ptr显式delete和new vs