Only_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?
10305 次浏览

是的,你可以比较它与 nullptr后的 move和它是保证比较相等。

来自 20.8.1/4

此外,u可以根据请求将所有权转移到另一个唯一指针 u2。在完成这种转移后,下列后置条件仍然有效:
u2.p等于预转移 u.p,
ABC0等于 nullptr
...

(前面将成员 p描述为 & mash; 唯一指针是存储指向第二个对象 ABC0的指针的对象 u)

是的,来自 C + + 2011标准部分 20.7.1/4:

此外,您可以根据请求将所有权转移到另一个唯一指针 u2 这样一个传输,下面的后置条件包含[ ... ][源 unique _ ptr ]等于 nullptr..。