проблема с переменной внутри переменной возвращается после изменения изменено

У меня проблема в том, что когда я меняю переменную, она кажется неизменной, когда на нее ссылаются позже в коде.

class foo
{
private:
    string name;
public:
    foo(string _name)
    :name(_name)
    {}
    void info()
    { cout<<name; }
    void newName(string new_name)
    { name = new_name; }
};

class bar
{
private:
    string _name;
    vector<foo> _content;
public:
    foo at(int i)
    { return _content.at(i); }
    void push_back(foo newFoo)
    { _content.push_back(newFoo); }
};

int main()
{
    foo test("test");
    bar kick;
    kick.push_back(test);
    kick.at(0).newName("nice");
    kick.at(0).info();

    return 0;
}

Я хотел бы, чтобы программа возвращала «nice», но возвращает «test». Я предполагаю, что это имеет какое-то отношение к сфере, но я не знаю. Как бы я написал что-нибудь, что может обойти эту проблему?

Всего 1 ответ


Эта функция-член

foo at(int i)
    { return _content.at(i); }

возвращает копию объекта, хранящегося в векторе.

Если вы хотите получить ожидаемый результат, верните ссылку.

foo & at(int i)
    { return _content.at(i); }

const foo & at(int i) const
    { return _content.at(i); }