迭代向量时,使用return语句退出循环是否安全?

时间:2014-05-27 13:37:33

标签: c++ loops iterator exit

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

void X::foo(void) {

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

  // test2
  ...

  // test3
  ...
}

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

2 个答案:

答案 0 :(得分:3)

只要将任何可能分配的资源返回给系统,这是安全的。如果您使用c ++并利用正确实现RAII概念的结构,例如shared_ptr等,那么就没有问题。

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

答案 1 :(得分:1)

在for中声明的变量在“自动存储器”中分配,这意味着它们将存在于变量范围本身内:“i”将在超出范围时自动解除分配。

所以是的,从循环中“突然”返回是安全的。