我有两个智能指针:
Foo *p1 = new Foo;
Foo *p2 = new Foo;
std::unique_ptr<Foo> u1(p1);
std::unique_ptr<Foo> u2(p2);
现在我希望 u1
拥有 p2
。我希望 u2
不拥有任何东西(或 nullptr
)。当然,同时必须优雅地删除p1
。
我应该编写什么 C++ 代码来完成它?
最佳答案
使用 std::move
将 u2
转换为右值,然后使用移动赋值将 u2
“移动”到 u1
:
u1 = std::move(u2);
移动后,u2
将是 nullptr
尽管这是 unique_ptr
的特殊情况,不要指望从对象移动到一般任何特定的状态。当然 p1
将被优雅地删除。
我建议你根本不要创建 p1
或 p2
并且永远不要拥有任何原始指针:
std::unique_ptr<Foo> u1(new Foo);
或者更好的是,在 C++14 中:
auto u1 = std::make_unique<Foo>();
关于c++ - 如何在 unique_ptr 之间移动所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045082/