Избегайте копирования при возврате текущего объекта - PullRequest
0 голосов
/ 29 сентября 2019

Следующий код реализует методы, которые либо возвращают копию своего соответствующего объекта, либо создают новый объект и возвращают его на основе значения cond.В идеале я хочу изменить его так, чтобы, если cond было истинно, метод возвращал объект, а не его копию.

#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 Ответ

1 голос
/ 29 сентября 2019

В функции getObj() создание нового объекта неожиданно для его имени.Разделите функции как isXXX, createObj и getObj.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...