假设我们有一个方法。方法内部是一个包含n次迭代的循环,其中声明并初始化了一个对象<input type="file" name="audio_i0" id="audio_i0"/>
。
示例:
myObj
答案 0 :(得分:5)
它构建和销毁了多少次?一次,或n次?
n次。
何时进行构造 - 执行行时,或程序调用方法?
执行该行时。
什么时候发生破坏?在每次迭代结束时,在for块的末尾,或方法的结尾?
当离开对象的范围时;对于您的示例代码,在每次迭代结束时。
BTW:A myObj();
不是对象的定义,而是函数的声明。您可以指A myObj;
或A myObj{};
(自C ++ 11以来)。搜索most vexing parse了解详情。
答案 1 :(得分:3)
在您的代码myObj
声明但从未定义。 myObj
被声明为不带参数的函数,并返回类型为A
的对象。
非定义的声明没有运行时效果,因此循环的每次迭代都没有构造。
如果您在循环体内声明并定义了一个对象,那么它将在定义点构造,并在每次迭代时在其范围的末尾(循环体的末尾)进行破坏。
答案 2 :(得分:2)
构建并销毁了100个不同的对象。
话虽如此,如果对象的构造和破坏是微不足道的,你将不会看到性能成本。
此外,如果优化编译器能够确定构造和析构对结果没有可观察到的影响,则可以自由删除冗余代码。
但是,根据经验,只有在需要构造和破坏行为时,才能在循环中构造对象。