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

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

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

пример кода:

#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()?


person user1438233    schedule 08.04.2014    source источник
comment
Я не вижу статического списка в вашем коде.   -  person Oktalist    schedule 09.04.2014
comment
Предлагаемое чтение: Почему «использование пространства имен std;» считается плохой практикой?   -  person Deduplicator    schedule 09.04.2014


Ответы (1)


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

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

Что такое время жизни "newStruct"? addStructToList() или Main()?

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

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

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

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

person Danvil    schedule 08.04.2014