get_name()
возвращает копию члена. Два разных вызова возвращают две разные копии члена.
Это приведет к ожидаемому результату:
int main()
{
Name_pairs np0;
auto name = np0.get_name0();
name.push_back("m0");
cout << "\nnp0 object: ";
for (string s : name)
cout << s << " ";
}
В вашем коде нет «локальной копии». Возвращенный вектор является временным, который перестает существовать в конце оператора.
- Внутри функции-члена get_name0 () вектор «name» является локальной копией частного элемента данных «имя».
Нет. Внутри функции-члена name
находится член с именем name
. То, что вы возвращаете из метода, является копией.
Добавление элемента «f0» внутри функции get_name0 () должно сделать объект np0 имеющим {ab, f0}, и это так. Здесь нет проблем.
Здесь нет проблем, но вы добавляете к члену, а не к какой-то «локальной копии». Сначала вы добавляете, затем копируете (и возвращаете копию из метода).
Добавление элемента «m0» в основную функцию должно сделать (?) Объект np0 иметь {ab, f0, m0}, но вместо этого он имеет {ab, f0, f0}.
Объект, к которому вы добавляете "m0"
, исчезает после этой строки:
np0.get_name0().push_back("m0");
Его время жизни закончилось. Вы должны найти способ увидеть это когда-нибудь снова. Следующий вызов get_name0()
даст вам новую копию участника после повторного добавления "f0"
к члену.