我对以下示例中管理内存的方式感到不安:
void X::foo(void) {
// test1 :
for (auto i = this->vec.begin(); i != this->vec.end(); ++i) {
if ( ... ) {
return;
}
}
// test2
...
// test3
...
}
即使迭代器没有内存分配,我也希望确保循环中出现这样的问题是没有问题的。 打破循环更安全,检查测试结果然后退出函数而不通过test2和test3?
答案 0 :(得分:3)
只要将任何可能分配的资源返回给系统,这是安全的。如果您使用c ++并利用正确实现RAII概念的结构,例如shared_ptr
等,那么就没有问题。
立即返回"立即"离开函数调用。但是,在此之前,编译器首先确保销毁任何临时对象。
答案 1 :(得分:1)
在for中声明的变量在“自动存储器”中分配,这意味着它们将存在于变量范围本身内:“i”将在超出范围时自动解除分配。
所以是的,从循环中“突然”返回是安全的。