我对以下示例中内存管理的方式感到不自在:
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 "是安全的。