скажем, у меня есть класс с именем человека с конструктором имя, возрастобъект уничтожен в памяти стека
void addPerson(list<person> &list)
{
person p("Michael", 19);
list.push_back(p);
}
int main
{
list<person> list;
addPerson(list);
cout<<list.size();
}
Я знаю, что размер в списке является будет 1, но я чувствую, как сфера P, только в addPerson(), как только метод завершится, p будет уничтожен, и память, которая будет удерживаться p, будет выпущена, что означает, что список в main потеряет этот элемент?
Предполагая, что вы используете 'зЬй :: list', значение' p' будет * копироваться * в список при вызове 'push_back'. . Объект person в списке - это копия 'p', а не' p'. – PaulMcKenzie
@PaulMcKenzie, но прототип функции void push_back (const value_type & val), не используется ли ссылка, а не копия? – lxdthriller
Вы передаете значение по ссылке. Ничто не останавливает функцию 'push_back' от копирования этого значения. Если вы хотите доказать: 'void foo (int & val) {int myVal = val;}' Видите это? Значение копируется в myVal. – PaulMcKenzie