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

liz*_*isk 72 c++ unique-ptr move-semantics c++11

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?
Run Code Online (Sandbox Code Playgroud)

Pra*_*ian 68

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

来自§20.8.1/ 4 [unique.ptr]

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

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


Pau*_*ans 10

是.从C++ 2011标准第20.7.1/4节:

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