web-dev-qa-db-ja.com

unique_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?
71
lizarisk

はい、nullptrの後のmoveと比較することができ、等しいことが保証されます。

From§20.8.1/ 4 [unique.ptr]

さらに、uは、要求に応じて、所有権を別の一意のポインターu2。そのような転送が完了すると、次の事後条件が成立します。
u2.pは、転送前と同じu.p
u.pnullptrと等しい
...

(メンバーpは前に説明されています—一意のポインターは、2番目のオブジェクトuへのポインターを格納するオブジェクトpです)

67
Praetorian

はい。 C++ 2011標準セクションから20.7.1/4

さらに、uは、要求に応じて、所有権を別の一意のポインターu2に転送できます。このような転送が完了すると、次の事後条件が保持されます[...] [ソースunique_ptr]はnullptr ...

10
Paul Evans