c++ - std::unique_ptr 用法

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

std::unique_ptr<int> p1(new int);
std::unique_ptr<int> p2(new int);
p2=p1;

这里似乎 p1 不再是“唯一的”,因为 p2 也引用了它

这是合法的 c++ 吗? unique_ptr 有 copy_semantics 吗? 如果不是,并且它只有移动语义,那么在将 p1 分配给 p2 之后是否将其设置为 NULL ?

编辑:

好的,所以正确的版本是

 p2=std::move(p1)

据此,在此分配之后,p1 无效?和 auto_ptr 的区别就在这里?明确指定所有权的转移比隐含的更安全,因为我猜想 auto_ptr 就是这种情况

最佳答案

std::unique_ptr 是不可赋值和不可复制的。你需要使用 std::move();

所以

p1 = std::move(p2);

看看here了解更多信息。

关于c++ - std::unique_ptr 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622764/

相关文章:

c++ - 如何使假定派生类变量的相邻存储的黑客合法化?

c++ - 在列中显示双端队列 vector

c++ - 我在 C++11 标准中缺少什么?

c++ - 我应该使用指针还是 move 语义来传递大块数据?

c++ - 将 vector<unique_ptr<Derived>> move 到 vector<unique_ptr<Base>>

c++ - Very Sleepy 分析器中花括号附近显示的时间测量值代表什么?

c++ - 关于C++预处理器的问题

c++ - 如何获得重载解析选择的仿函数签名?

c++ - 将导出的 std::unique_ptr 转换为基类并将所有权作为参数传递

c++ - 我想访问 std::unique_ptr 中的特定元素