将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
save local variables into global vector, why can i got these local variables after leaving local scope?
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;
附言如果在变量超出范围后保留指向局部变量的指针,然后取消引用指针(即尝试检索变量的值(,则可能会成功并获取旧值"这是未定义的行为">,因此任何事情都可能发生,包括成功。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- C++中静态方法的局部变量范围
- 离开范围后如何保护局部变量的值?
- 在其范围之外使用局部变量
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 尝试声明函数的局部变量,但得到范围错误
- 局部变量超出范围..我认为
- 变量循环范围会导致返回局部变量的地址引用
- C++ 中静态局部变量的范围和生存期
- 从 Outsie it 范围 C++ 访问局部变量
- 在范围内存在不可复制的局部变量时按值捕获
- Lambdas和引用捕获局部变量:在范围之后访问
- 指针可以将局部变量的内存指向其范围之外?
- 是否可以在其范围之外访问局部变量的内存?
- 如何在C++的另一个范围内使用局部变量
- 在类范围内声明与类属性同名的局部变量