在vector上迭代时使用return语句退出循环是否安全?

is it safe to quit a loop with a return statement while iterating over a vector?

本文关键字:退出 语句 循环 是否 安全 return vector 迭代      更新时间:2023-10-16

我对以下示例中内存管理的方式感到不自在:

void X::foo(void) {
  // test1 :
  for (auto i = this->vec.begin(); i != this->vec.end(); ++i) {
        if ( ... ) {
            return;
        }
    }
  // test2
  ...
  // test3
  ...
}

即使没有为迭代器分配内存,我也希望确保突然停止这种循环没有问题。打破循环,检查测试结果,然后不通过test2和test3退出函数是否更安全?

只要您将任何可能分配的资源返回给系统,这是安全的。如果你使用的是c++语言,并且正在使用能够正确实现RAII思想的结构,例如shared_ptr等。那就没有问题了。

返回实质上"立即"离开函数调用。但是,在此之前,编译器确保首先销毁所有临时对象。

在for中声明的变量是在"自动内存"中分配的,这意味着它们将存在于变量作用域中:"i"将在超出作用域时自动释放。

所以,是的,从循环中返回" sudden "是安全的。