unique_ptr是否保证在移动后存储nullptr?

时间:2014-06-05 13:37:58

标签: c++ c++11 move-semantics unique-ptr

unique_ptr保证在移动后存储nullptr吗?

std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?

2 个答案:

答案 0 :(得分:65)

是的,您可以在nullptr之后将其与move进行比较,并保证比较相等。

来自§20.8.1/ 4 [unique.ptr]

  

此外,u可以根据请求将所有权转让给另一个唯一指针u2。完成转移后,以下后置条件成立:
   - u2.p等于转帐前u.p
   - u.p等于nullptr
  ...

(成员p在前面描述为 - 唯一指针是一个对象u,它存储指向第二个对象的指针p

答案 1 :(得分:10)

是。从C ++ 2011标准部分 20.7.1 / 4

  

此外,根据请求,您可以将所有权转移到另一个唯一指针u2。完成后   这样的转移,以下后置条件持有[...] [source unique_ptr]等于nullptr ......