Время жизни переменной в статическом списке

этот код добавляет новый объект в статический список внутри функции. список передается по ссылке на функцию.

что за время жизни нового объекта в списке?

Пример кода:

#include <list>
#include <string>
#include <iostream>

using namespace std;

struct MyStruct
{
int x;
string str;
};

void addStructToList(list<MyStruct> &myStructlist, int _x, string _str)
{
MyStruct newStruct;
newStruct.x = _x;
newStruct.str = _str;
myStructlist.push_back(newStruct);
}

void main()
{
list<MyStruct> myStructlist;
addStructToList(myStructlist, 111, "aaa");
addStructToList(myStructlist, 222, "bbb");
addStructToList(myStructlist, 333, "ccc");

for (auto it = myStructlist.begin(); it != myStructlist.end(); it++)
{
cout << it->x << " " << it->str << endl;
}

system("pause");
}

выход:

111 aaa
222 bbb
333 ccc
Press any key to continue . . .

Вопрос:

Безопасен ли этот код с точки зрения использования памяти?

Что такое жизнь «newStruct»? addStructToList () или Main ()?

0

Решение

Безопасен ли этот код с точки зрения использования памяти?

Да, это безопасно. list унд string позаботиться об управлении памятью автоматически. Вы можете получить ошибку нехватки памяти, если добавите в список действительно много элементов (например, 100000000).

Что такое жизнь «newStruct»? addStructToList () или Main ()?

newStruct существует только в функции addStructToList, Но копия создана и помещена в myStructlist, Копия живет в Main,

Небольшое дополнительное замечание: всегда проходить string по константной ссылке, а не по значению:

void addStructToList(list<MyStruct> &myStructlist, int _x, const string& _str) { ... }

Еще одно замечание: вы вводите слово «статический» в заблуждение. Увидеть Ключевое слово static и его различные применения в C ++ для объяснения, что означает статическое в C ++.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]