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

标签 c++ c++11 smart-pointers unique-ptr

这段代码有问题:

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/

相关文章:

c++ - 当应用程序最小化/隐藏时,是否可以 QProgressDialog::show 不将对话框置于最前面?

c++ - 我可以使用 '->' 运算符通过指针访问对象指针吗?

c++ - 在使用 Clang 编译 CRTP Singleton 时,如何解决声称缺少 "explicit instantiation declaration"的问题?

c++ - 用另一个 unique_ptr 替换 vector 中的 unique_ptr 对象

c++ - 检测是否针对调试 MSVCRT 构建了 .lib

c++ - nopoll 丢失连接发现

c++ - 为什么 C++11 中没有 vector(size_type n, const Allocator& alloc)?

c++ - 在 C++11 环境中使用 VLA

c++ - C++ 中的读写线程安全智能指针,x86-64

c++ - 如何将 const weak_ptr 放入 STL 容器中