这是滥用/误用Move Semantics吗?

Bla*_*iwi 1 c++ move-semantics

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

例如:

MyObject(MyObject &&obj) { // Implementation }
Run Code Online (Sandbox Code Playgroud)

但是,如果MyObject在很大程度上只是像矢量一样包装STL容器,那该怎么办呢?是否会采用移动构造函数来获取向量并将其视为滥用功能?

MyObject(vector<backingtype> &&v) : i_Backing(move(v)) {}  
Run Code Online (Sandbox Code Playgroud)

我问这个是因为我正在制作一个UTF-8感知的json解析器,它大量使用复制,而移动容器则足够快.

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

Bri*_*ian 5

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