在循环中声明的对象只构造一次吗?

Jon*_* Ma 3 c++ loops lifetime

假设我们有一个方法.方法内部是一个包含n次迭代的循环,其中myObj声明并初始化了一个对象.

  • 它被建造和摧毁了多少次?一次,或n次?
  • 什么时候构造发生 - 当执行该行时,或者当程序调用该方法时?
  • 破坏何时发生?在每次迭代结束时,在for块的末尾,或方法的结尾?

例:

void foo()
{
   for (int i = 0; i < 100; i++)
   {
       A myObj();
   }
}
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

它被建造和摧毁了多少次?一次,或n次?

n次.

什么时候构造发生 - 当执行该行时,或者当程序调用该方法时?

当执行该行时.

破坏何时发生?在每次迭代结束时,在for块的末尾,或方法的结尾?

当离开对象的范围时; 对于您的示例代码,在每次迭代结束时.


BTW:A myObj();不是对象的定义,而是函数的声明.你可能意味着A myObj;A myObj{};(从C++ 11开始).搜索最令人烦恼的解析更多细节.