2014-05-12 35 views
1

當人們通常討論或使用移動語義時,通常是在移動兩個相同類型的類的上下文中。這是濫用/誤用移動語義嗎?

如:

MyObject(MyObject &&obj) { // Implementation } 

但是如果myObject的是隻包裹像載體STL容器的大部分。會做出一個移動構造函數,並將其移動到向量並將其視爲濫用功能?

MyObject(vector<backingtype> &&v) : i_Backing(move(v)) {} 

我問這個,因爲我正在做一個UTF-8瞭解JSON解析器使用了大量的複製,而移動容器就足夠了,速度更快。

auto arrayParseRes = jsonArrayParse(input); // Array parse res 
auto jsonArray = JsonArray(arrayParseRes.Parse_Value()); // Currently copying json values 

回答

5

不,從傳遞給您的構造函數的右值轉移到您的類成員之一沒有任何問題。 std::pairstd::tuple的構造函數也是這樣做的。

+0

感謝STL的例子。綽綽有餘的證明證明它對C++來說是慣用的。 – BlamKiwi