在这种情况下如何使用unique_ptr?

use*_*112 2 c++ smart-pointers unique-ptr c++11

我有这个代码的问题:

A* a = createAnAObject().get();
Run Code Online (Sandbox Code Playgroud)

其中createAnAObject()返回unique_ptr

问题是我必须这样做:

x.setA(a);   // Pass ownership here
Run Code Online (Sandbox Code Playgroud)

并且X对象必须拥有该A对象的所有权,但是,据我所知,它unique_ptr::get()创建了一个临时对象,它超出了下一行的范围并调用了析构函数,删除了我的A对象?

我该怎么办?我无法更改X对象的界面.

我认为我需要将所有权传递给非unique_ptr,因为我无法将X类更改为具有unique_ptr.

Tar*_*ama 7

而不是调用get你可以调用release,这将给你底层指针和释放所有权.

A* a = createAnAObject().release();
Run Code Online (Sandbox Code Playgroud)

如果你在这两个电话之间有任何额外的代码,我建议保持这个std::unique_ptr,直到你打电话给setA你,如果出现问题你没有任何泄漏:

auto a_ptr = createAnAObject();
//...
x.setA(a_ptr.release());
Run Code Online (Sandbox Code Playgroud)