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

时间:2019-09-29 02:17:51

标签: c++ c++11

以下代码实现了一个方法,该方法要么返回其对应对象的副本,要么创建一个新对象,然后根据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;

1 个答案:

答案 0 :(得分:2)

在功能getObj()中,从其名称开始意外创建一个新对象。划分isXXXcreateObjgetObj之类的功能。