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

是否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? 

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

§20.8.1/ 4 [unique.ptr]

此外,您可以根据要求将所有权转让给另一个唯一的指针u2 。 完成转让后,下列后置条件成立:
u2.p等于预调,
up等于nullptr ,并且

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

是。 来自C ++ 2011标准章节20.7.1 / 4

此外,您可以根据要求将所有权转让给另一个唯一的指针u2。 在完成这样的转移后,以下后置条件保持[unique_ptr]源等于nullptr …