2017-06-15 16 views
5

私は、テンプレートコンテナクラスを持っている:明示的な移動コンストラクタがコンテナに必要ですか?

template<class Stuff> 
class Bag{ 
    private: 
     std::vector<Stuff> mData; 
}; 

私は

void InPlace(Bag<Array>& Left){ 
     Bag<Array> temp; 
     Transform(Left, temp); //fills temp with desirable output 
     Left = std::move(temp); 
    } 

を行うと仮定アレイは、ユーザー定義の移動の意味を持っていますが、バッグにはない欲しいです。この場合mDataは移動またはコピーされますか?

+0

良いキャッチ固定 – AGML

答えて

8

移動され、コピーされません。

私は、以下の画像を見てお勧めし

:これは明らかに、コンパイラが暗黙のうちに限り、ユーザーは、彼/を定義しないと移動のコンストラクタを生成することを示している


enter image description here


彼女自身:

  • デストラクタ
  • あなたのクラスには、これらのユーザ定義のコンストラクタのどれを持っていないので0
  • コピーコンストラクタ
  • コピー代入
  • 移動割り当て

は、コンパイラが生成移動コンストラクタはコンストラクタがmDataを移動することを、呼び出されます。

+0

この素敵なテーブルはどこにありますか? – zett42

+1

@ zett42私は忘れてしまった。しかし、私は簡単な検索を行いました。プレゼンテーションから来ました:https://stackoverflow.com/a/24512883/1870760 –

+3

実際のプレゼンテーション:https://accu.org/content/conf2014/Howard_Hinnant_Accu_2014.pdf –

関連する問題