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?
答案 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 ......