如果程序退出循环是goto已删除的本地变量

If program exits loop by goto are local variables deleted?

本文关键字:删除 变量 goto 程序 退出 循环 如果      更新时间:2023-10-16

通常,当您退出时,对于循环说,在内部声明的变量将被删除。例如:

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

它被删除,因为它不再在范围