c++ - 如何在 unique_ptr 之间移动所有权

标签 c++ c++11

我有两个智能指针:

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::moveu2 转换为右值,然后使用移动赋值将 u2 “移动”到 u1:

u1 = std::move(u2);

移动后,u2 将是 nullptr 尽管这是 unique_ptr 的特殊情况,不要指望从对象移动到一般任何特定的状态。当然 p1 将被优雅地删除。

我建议你根本不要创建 p1p2 并且永远不要拥有任何原始指针:

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/

相关文章:

c++ - 在 C++ 中获取/设置日期和时间

c++ - 如何让 C++ 按下空格键?

属性名称为字符串的 C++ 对象输出

c++ - 你能举个关于这一点的例子吗 : lambda-expression

c++ - 在没有单调时钟的系统上是否不可能实现一致?

c++ - Qt 中的反跳事件过滤器

c++ - 使 'const' 使用类型特征的结果

c++ - 在 C++11 中创建指针 vector 的惯用方法?

c++ - C++ 中函数参数的类型别名

c++ - 如何从 std::map 中的 std::pair 的 std::vector 获取输入?