以下代码实现了一种方法,该方法要么返回其对应对象的副本,要么创建一个新对象,然后根据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
的返回类型更改为引用或指针。尽管如此,我不能更改保存输出的 vector :std::vector<Base> objects;
最佳答案
在函数getObj()
中,从其名称开始意外创建一个新对象。划分函数isXXX
,createObj
和getObj
。
关于c++ - 避免在返回当前对象时进行复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58151697/