这是滥用/误用移动语义吗?
Is this an abuse/misuse of Move Semantics?
当人们通常讨论或使用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::pair
和std::tuple
的构造函数也这样做。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 可以使用移动语义更改或改进此C++代码吗?
- c++在使用指针时移动语义
- 使用移动和复制语义时函数匹配如何工作?
- 移动语义和深层/浅层复制之间有什么关系?
- 了解构造函数在移动、复制、赋值语义中的行为
- std::unique_lock移动语义
- 移动语义和运算符 + 重载
- C++ 移动语义是否在任何情况下都能节省资源?
- 移动语义在这里如何工作?
- 使用移动语义:右值引用作为方法参数
- 在C++中使用移动语义的正确方法是什么?
- 移动语义 c++ 单链表
- C++:使用整数移动语义
- 当变量和参数名称匹配时,移动语义构造失败
- 在 C++11 中移动语义
- 方法冗余移动调用的移动语义
- 视觉理解移动C++标准的语义
- 如何通过move语义移动多个参数