2016-03-06 87 views
1

類我寫了一個移動構造函數用於下列方式類構造函數:c + +將含有載體

class A 
{ 

    std::vector<double> m; 

    A(A&& other) 
     : m{other.m} 
    { 
    } 
} 

這是移動other.mm正確的方法是什麼?

我應該這樣做嗎?

A(A&& other) 
    : m{std::move(other.m)} 
{ 
} 

或者我應該完全做其他事情?

+0

您應該保持默認狀態。零規則。 – zch

回答

1

第二個片段是移動other.m因爲它需要被轉化爲R值參考的std::vector移動構造函數中踢左值的正確方法。

即使,在這個具體的例子,這將是足夠的,以簡單的寫

A(A&& rhs) = default; 

編譯器將生成的各rhs部件移動到的*this的corresponing構件的構造函數。

p.s.你也可能意味着公開構造函數。

+0

我更喜歡爲練習手動編寫它們,通常我會有非常重要的移動/複製構造函數/作業的類。我是否必須在移動賦值運算符中使用std :: move?目前,我只是使用std :: swap?也許我應該問這是一個單獨的問題? – user3728501

+0

如果你想移動它們,你應該在名稱變量上使用'std :: move'。它是什麼功能並不重要。 –