避免在返回当前对象时复制

Avoid copying in returning current object

本文关键字:对象 复制 返回      更新时间:2023-10-16

下面的代码实现了一个方法,该方法返回其相应对象的副本或创建一个新对象并根据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()中,创建一个新对象从其名称来看是出乎意料的。划分isXXXcreateObjgetObj等函数。