可能重复:
while 和 for 循环的范围是什么?
for (int32 segNo = 0; segNo < 10; ++segNo)
{
my_Object cm;
}
每次通过循环时都会调用对象 cm 的构造函数和析构函数吗?
如果是这样,将在循环变量递增之前还是之后调用析构函数?
可能重复:
while 和 for 循环的范围是什么?
for (int32 segNo = 0; segNo < 10; ++segNo)
{
my_Object cm;
}
每次通过循环时都会调用对象 cm 的构造函数和析构函数吗?
如果是这样,将在循环变量递增之前还是之后调用析构函数?
是的。并且在增量之前调用析构函数。我知道,简短的回答,但就是这样。
#include <iostream>
struct Int {
int x;
Int(int value):x(value){}
bool operator<(int y)const{return x<y;}
void increment() { std::cout << "incremented to " << ++x << "\n";}
};
struct Log {
Log() { std::cout << "Log created\n";}
~Log() { std::cout << "Log destroyed\n";}
};
int main()
{
for(Int i=0; i<3; i.increment())
{
Log test;
}
}
结果:
Log created
Log destroyed
incremented to 1
Log created
Log destroyed
incremented to 2
Log created
Log destroyed
incremented to 3
对象的生命在那些花括号里面。
默认构造函数在代码的第 3 行被调用。当您到达 } 时,将调用析构函数。然后你的循环增加,然后检查条件。如果它返回 true,则创建另一个对象(并调用构造函数)。