class MyData
{
public:
string str;
int num;
};
vector<MyData> vec;
void Generate_data()
{
for (int i = 0; i < 3; ++i)
{
ostringstream oss("");
oss << "str " << i;
MyData my_data;
my_data.num = i;
my_data.str = oss.str();
vec.push_back(my_data);
}
}
int main()
{
Generate_data();
for (int i = 0, size = vec.size(); i < size; ++i)
{
cout << vec[i].num << ": " << vec[i].str << endl;
}
return 0;
}
输出:
0: str 0
1: str 1
2: str 2
将局部变量保存到全局向量中。离开局部范围后,为什么可以得到这些局部变量?他们的记忆不应该被释放吗?
将局部变量的副本保存在全局容器中。
这里有一个实验应该很清楚:
MyData my_data;
my_data.num = 1;
vec.push_back(my_data);
my_data.num = 2;
cout << vec[0].num << endl;
附言如果在变量超出范围后保留指向局部变量的指针,然后取消引用指针(即尝试检索变量的值(,则可能会成功并获取旧值"这是未定义的行为">,因此任何事情都可能发生,包括成功。