如果程序通过 goto 退出循环,局部变量是否被删除?
If program exits loop by goto are local variables deleted?
通常,当你退出时,比方说for循环,里面声明的变量会被删除。
例如:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
}
尽管创建了大小为 1000000 的向量,但循环后内存是空闲的。
如果我们这样做:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
goto after_for;
}
after_for: ;
矢量会保留在内存中还是被删除?
它已被删除,因为它不再在范围内
将被删除。变量超出范围,因此调用析构函数(并释放内存)即使您以这种方式退出也可以保证:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
throw std::runtime_error("xyz") ;
}
通常,当你退出时,比方说for循环,里面声明的变量会被删除。 例如:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
}
尽管创建了大小为 1000000 的向量,但循环后内存是空闲的。
如果我们这样做:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
goto after_for;
}
after_for: ;
矢量会保留在内存中还是被删除?
它已被删除,因为它不再在范围内
将被删除。变量超出范围,因此调用析构函数(并释放内存)即使您以这种方式退出也可以保证:
for(int i=0; i<10; i++)
{
vector <int> v;
for(int j=0; j<1000000; j++) v.push_back(j);
throw std::runtime_error("xyz") ;
}