>>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相当の
状態にしてしまう。
ということのようですね。
探検
C++相談室 part155
■ このスレッドは過去ログ倉庫に格納されています
146デフォルトの名無しさん
2021/04/09(金) 12:39:59.46ID:QYkH8yRN■ このスレッドは過去ログ倉庫に格納されています
