2017-06-15 41 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


這清楚地表明,編譯器隱只要用戶沒有定義他/生成一個移動構造函數她自己的:

  • 析構函數
  • 拷貝構造函數
  • 拷貝賦值
  • 移動分配

由於類卻沒有這些用戶定義的構造函數,編譯器生成的移動構造函數將被調用的,它們的構造運動mData

+0

這張漂亮的桌子從哪裏來? – zett42

+1

@ zett42我忘了,我只是把它鋪設。不過,我做了一個快速搜索,它是從一個演示文稿:https://stackoverflow.com/a/24512883/1870760 –

+3

實際演示:https://accu.org/content/conf2014/Howard_Hinnant_Accu_2014.pdf –