在 for 循环中构造的对象是否会在各自的迭代之后或整个循环完成之后被破坏?

qsf*_*fzy 1 c++ openmp

我在并行 for 循环内创建大量对象,以执行同一任务的细微变化。构造时,对象分配一些向量。循环看起来像这样:

#pragma omp parallel for schedule(dynamic)
for (long long unsigned i=0; i<nparam; i++) {
    Foo x;
    x.do_task();
    x.save_results();
}
Run Code Online (Sandbox Code Playgroud)

它导致计算机内存不足。Foo这是因为在循环的所有迭代完成之前每个对象都不会被破坏。这可能是个问题,因为如果我要进行 100,000 次迭代,并且每个对象使用具有 10,000 个双精度的向量,则需要 8 GB(对吗?),这很大。

另一方面,如果每个Foo对象在循环迭代后被破坏,我必须在某处寻找内存泄漏。

Jes*_*uhl 5

“在 for 循环内构造的对象是否在各自的迭代后被破坏” - 是的。

“或者在整个循环结束之后?” - 不。

对象在声明它们的作用域结束时被销毁。循环体for是一个作用域(作用域用大括号表示{}),因此每次迭代都会构造和销毁一个新对象。