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?
はい、nullptr
の後のmove
と比較することができ、等しいことが保証されます。
From§20.8.1/ 4 [unique.ptr]
さらに、
u
は、要求に応じて、所有権を別の一意のポインターu2
。そのような転送が完了すると、次の事後条件が成立します。
—u2.p
は、転送前と同じu.p
、
—u.p
はnullptr
と等しい
...
(メンバーp
は前に説明されています—一意のポインターは、2番目のオブジェクトu
へのポインターを格納するオブジェクトp
です)
はい。 C++ 2011標準セクションから20.7.1/4:
さらに、uは、要求に応じて、所有権を別の一意のポインターu2に転送できます。このような転送が完了すると、次の事後条件が保持されます[...] [ソースunique_ptr]はnullptr ...