避免在返回当前对象时复制
Avoid copying in returning current object
下面的代码实现了一个方法,该方法返回其相应对象的副本或创建一个新对象并根据cond
的值返回它。理想情况下,我希望以一种如果cond
为 true 的方式更改它,该方法返回它的对象而不是它的副本。
#include <iostream>
#include <vector>
class Base {
protected:
std::vector<int> p_;
public:
Base(std::vector<int>& p) : p_(p.begin(), p.end()) {}
Base getObj() const {
if (cond) {
return *this; // Even if cond is true, I'm copying here. This is what I wish to change.
} else {
std::vector<int> p1 = {...};
return Base(p1);
}
}
};
int main() {
std::vector<int> v = {2, 4, 5};
std::vector<Base> objects;
Base b(v);
objects.emplace_back(b.getObj());
}
更多详情
我可以灵活地将getObj
的返回类型更改为引用或指针。尽管如此,我无法更改保存输出的这个向量:std::vector<Base> objects;
在函数getObj()
中,创建一个新对象从其名称来看是出乎意料的。划分isXXX
、createObj
和getObj
等函数。
相关文章:
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 了解在 C++ 中分配容器时的对象复制
- C++类对象复制构造函数和运算符=
- 复制 elision/RVO 会导致从同一对象复制/移动吗?
- 如何在循环内将大对象复制到omp任务中?
- 为什么当我添加一个不同的对象(复制构造函数中的参数)时调用复制构造函数?
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 将C++对象复制到指向新指针的指针处
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- 选择性地禁用隐式对象复制
- 不能从文件到指针向量的对象复制
- 从派生对象复制构造
- OpenCV Mat对象复制速度更快
- 将子对象复制到父对象
- 为什么普通的 c++ 编译器不优化对象复制?
- C :将一个对象复制到构造函数中的另一个对象
- 使用命名对象复制构造函数
- 不必要的对象复制 - C++ STL
- 如何将一个类的对象复制到另一个类中