我想做这样的事情:
unique_ptrMyFunc() { MyObj* ptr = new MyObj(); ... return unique_ptr (ptr); } unique_ptr value = MyFunc();
但是我不确定在函数返回后临时值被破坏时是否会删除该对象.如果是这样,我应该如何正确实现一个返回unique_ptr
?的函数?
不,当函数范围结束时,不会删除该对象.这是因为移动构造函数unique_ptr
会将所有权语义"移动"到新unique_ptr
对象,而旧的销毁unique_ptr
将不会导致删除已分配的对象.
注意:这不是正确的方法.如果在内存分配和unique_ptr<>
创建之间抛出异常,则会发生内存泄漏.