2011-09-27 85 views
1

我有一個類,它有一個矢量向量的成員。我想爲這個類編寫一個構造函數,它將一個向量的r值引用作爲參數,並將其作爲向量參數的單個元素向量移動到成員向量中。到目前爲止,我有:正確的方式來實現std :: vector的std :: vector的類的移動語義

class AClass 
{ 
    std::vector<std::vector<int>> member; 

public: 

    AClass(std::vector<int> &&vec) : member(1) 
    { 
     member[0] = std::vector<int>(std::move(vec)); 
    } 
} 

這似乎正常工作,但我不知道,如果std::move周圍vec是必要的。或者如果std::vector會爲我寫這篇文章的時候有點不同。

回答

5

應該更短寫:

member[0] = std::move(vec); 

,以調用

vector<T,Allocator>& operator=(vector<T,Allocator>&& x); 

據我所知,明確的運動是必要的,因爲vec不是右值(它是一個命名變量,可用於operator=的左側)。

0

現在這樣做的方法是將值通過值傳遞給構造函數,然後將其移動到您想要的位置。所以

AClass(std::vector<int> vec) 
{ 
    member.emplace_back(std::move(vec)); 
} 

你並不需要關心的值是否是拷貝構造的,或者如果它是可以移動到構造函數,因爲它是一個右值,或什麼的。您只需在函數定義中請求您獲得您自己的項目副本,並且該語言將盡可能地將其提供給您。