コンストラクタからようやく解放!(たぶん)
というわけで、最後のMoveコンストラクタですが
これはDeep Copyをせずにソースのオブジェクトをコピーせずに値を移動させちゃうようなコンストラクタです
基本的には、r-valueに対して有効と認識しています。(数字とか) l-valueは基本 int xとかのxです。
r-valueを参照するときは下記のようにします
int &&r_value = 200; r_value = 300;
&&が目印です。
例えばvectorを使ってクラスオブジェクトのメンバ(これはRawポインタ) にr-valueをpush_backしたいとき
この場合、vectorはそのオブジェクト、そしてr-valueオブジェクトをテンポラリでコピーします(コピーコンストラクタを使って)
なので複数回コピーをするわけです。これを効率的にするためにMove コンストラクタがあります。
次に、Moveコンストラクタの定義です。
Moveクラスがある場合
Move::Move(Move &&source)
: data{source.data} {
source.data = nullptr;
}
こんな感じです。
まあ、もしこれを見たら MOVE コンストラクタや!!!って感じでいまはよしとしておきます。
一応、覚えやすい定義として
""データを盗んで、ソースポインタをnullにする""
ってのがあるらしいですw
まあちょっとわかりやすい。