0

此代码在函数内将新对象添加到静态列表。该列表通过引用传递给该函数。

列表中新对象的生命周期是什么?

代码示例:

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

4

1 回答 1

1

这段代码在内存使用方面安全吗?

是的,它是安全的。list并自动string处理内存管理。如果您要在列表中添加很多项目(如 100000000),则可能会出现内存不足错误。

什么是“newStruct”生命周期?addStructToList() 还是 Main() ?

newStruct只存在于函数中addStructToList。但是会创建一个副本并将其放入myStructlist. 副本继续存在Main

补充一点小提示:始终通过stringconst 引用而不是按值传递:

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

另一句话:您误导性地使用了“静态”一词。请参阅静态关键字及其在 C++ 中的各种用途,以了解静态在 C++ 中的含义。

于 2014-04-08T23:08:48.653 回答