这段代码有问题:
A* a = createAnAObject().get();
其中 createAnAObject() 返回 unique_ptr
问题是我必须这样做:
x.setA(a); // Pass ownership here
和 X
对象必须拥有 A
对象的所有权,但是,据我所知,unique_ptr::get()
创建一个临时对象,它在下一行超出范围并调用析构函数,删除我的 A
对象?
我该怎么办?我无法更改 X
对象的接口(interface)。
我认为我不需要将所有权传递给非 unique_ptr,因为我无法将 X 类更改为具有 unique_ptr。
最佳答案
您可以调用 release
而不是调用 get
,这将为您提供底层指针并释放所有权。
A* a = createAnAObject().release();
如果您在两次调用之间有任何额外的代码,我建议您在调用 setA
之前保留 std::unique_ptr
,这样您就没有如果出现问题,任何泄漏:
auto a_ptr = createAnAObject();
//...
x.setA(a_ptr.release());
关于c++ - 在这种情况下如何使用 unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727364/