这是滥用/误用Move Semantics吗?

时间:2014-05-12 01:27:34

标签: c++ move-semantics

当人们通常讨论或使用移动语义时,通常在移动两个相同类型的类的上下文中。

例如:

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

但是,如果MyObject在很大程度上只包含一个像vector这样的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

1 个答案:

答案 0 :(得分:5)

不,从传递给你的构造函数的rvalue转移到你的一个类成员中没有任何错误。 std::pairstd::tuple的构造函数也是这样做的。