将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?

save local variables into global vector, why can i got these local variables after leaving local scope?

本文关键字:局部变量 范围 离开局 向量 全局 保存 为什么      更新时间:2023-10-16
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;

附言如果在变量超出范围后保留指向局部变量的指针,然后取消引用指针(即尝试检索变量的值(,则可能会成功并获取旧值"这是未定义的行为">,因此任何事情都可能发生,包括成功。