此代码将新对象添加到函数内的静态列表中。 通过引用函数传递列表。
列表中新对象的生命周期是什么?
代码示例:
#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 . . .
问题:
此代码在内存使用方面是否安全?
什么是&#34; newStruct&#34;一生? addStructToList()或Main()?
答案 0 :(得分:1)
这个代码在内存使用方面是否安全?
是的,这是安全的。 list
和string
自动处理内存管理。如果要在列表中添加很多项目(例如100000000),则可能会出现内存不足错误。
什么是&#34; newStruct&#34;一生? addStructToList()或Main()?
newStruct
仅存在于函数addStructToList
中。但是会创建一个副本并将其放入myStructlist
。该副本存在于Main
。
小附加注释:始终通过const引用而不是值传递string
:
void addStructToList(list<MyStruct> &myStructlist, int _x, const string& _str) { ... }
另一句话:你使用&#34; static&#34;误导性。有关C ++中静态含义的解释,请参阅The static keyword and its various uses in C++。