- 149 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:39:59.46 ID:QYkH8yRN.net]
- >>142
>ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、 >標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり >メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。 なるほど。 行(1)の場合、 1. 右辺でstd::move()をt1に行った段階では(実行段階で)マシン語は全く実行されない。 2. 中央の = は、move-constructor と解釈され、Tのmove-constructorが呼び出される。 3. Tの暗黙定義のmove-constructorは、メンバ同士のmove-construcotrなので、 メンバに shared_ptr<A> a があると、shared_ptr<A>のmoveコンストラクタが呼び出される。 そして、shared_ptr<A>のmoveコンストラクタは、実行後に「src側(from側)」をnullptr相当の 状態にしてしまう。 ということのようですね。
|

|