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