为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离开元素的状态是不确定的。我也不认为智能指针的末端有任何保证。就是说,我