' P '

whatever I will forget

C++ Move Constructor

コンストラクタからようやく解放!(たぶん)

というわけで、最後の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
まあちょっとわかりやすい。