这是滥用/误用移动语义吗?

Is this an abuse/misuse of Move Semantics?

本文关键字:语义 移动      更新时间:2023-10-16

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

,

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

但是,如果MyObject在很大程度上只是包装一个STL容器,如vector。制作一个移动构造函数来获取矢量并移动它会被认为是对功能的滥用吗?

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

不,将传递给构造函数的右值移到类成员中没有任何问题。std::pairstd::tuple的构造函数也这样做。