【发布时间】:2011-04-11 14:27:22
【问题描述】:
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 就是这种情况
【问题讨论】:
-
@Andres:作为在各种 C++ 编译器中发现数十个错误的人,我认为这根本不是真的,尤其是涉及到相对较新(且相对未经测试)的语言特性时右值引用。
-
@James 这个虽然有效。 :)
-
您可以查看here 了解 unique_ptr 的典型用法
-
p1 在 'p2 = std::move(p1);' 之后持有一个空指针
标签: c++ c++11 unique-ptr