为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?
为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?
unique_ptr
Answers:
是的,你可以把它比作nullptr
后move
,并保证为比较相等。
从§20.8.1/ 4 [unique.ptr]
另外,
u
可以根据要求将所有权转移到另一个唯一的指针u2
。完成此类转移后,以下后置条件成立:
—u2.p
等于转移前u.p
,
—u.p
等于nullptr
,并且
...
(该成员p
先前被描述为-唯一指针是u
存储指向第二个对象的指针的对象p
)
p2{std::move(p1)}
正在p2
从构建p1
。这就是我在上面引用的文本中要求的所有权转让。move构造函数的实现将确保满足所有后置条件。
::move
离开元素的状态是不确定的。我也不认为智能指针的末端有任何保证。就是说,我