1. ホーム
  2. c++

[解決済み] unique_ptrは移動後にnullptrを格納することが保証されていますか?

2023-08-08 16:18:31

質問

質問 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 の後に記述すれば、等しい比較になることが保証されます。

から §20.8.1/4 [unique.ptr]より。

さらに u は、要求に応じて、所有権を別の一意なポインタ u2 . このような転送が完了すると、以下の後件が成立する。

- u2.p は転送前の u.p ,

- u.pnullptr であり、かつ

...

(メンバー p は、先に述べたように - は一意なポインタがオブジェクト u へのポインタを格納するもので、第二のオブジェクト p )