如果程序退出循环按goto删除局部变量?

时间:2017-11-23 14:29:28

标签: c++ goto

通常,当你退出时,让我们说for循环,删除里面声明的变量。 例如:

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: ;

尽管创建了大小为1000000的向量,但循环后内存是免费的。

如果我们这样做:

{{1}}

矢量会留在内存中还是被删除?

2 个答案:

答案 0 :(得分:0)

它被删除,因为它已不在范围内

答案 1 :(得分:0)

将被删除。变量超出范围,因此析构函数被调用(并释放内存)即使您以这种方式退出,也可以保证:

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") ;
}