for 循环中的对象作用域和生命周期
Object scope and lifetime in a for loop
假设我有以下代码。
vector<Cat> v; \Cat is a class
for (int i = 0; i < 5; i++)
{
Cat cat1;
if (someFunction(i))
{
cat1.setName("Whiskers");
v.push_back(whiskers) ;
}
}
我的问题是,在 for 循环中,对象 cat1 在执行 0 to 4
时是否超出范围?那就是析构函数会在这里被调用 5 次还是只调用一次?
构造函数和析构函数被调用了5次,对吧。
因为控制流跨越了 5 次 cat
的初始化,以及 5 次其作用域的结束(循环块的结束 '}')。
实际上,您在最外面的大括号中看到的实际上是在循环条件 (i < 5) 为真时重复的一个复合语句。
假设我有以下代码。
vector<Cat> v; \Cat is a class
for (int i = 0; i < 5; i++)
{
Cat cat1;
if (someFunction(i))
{
cat1.setName("Whiskers");
v.push_back(whiskers) ;
}
}
我的问题是,在 for 循环中,对象 cat1 在执行 0 to 4
时是否超出范围?那就是析构函数会在这里被调用 5 次还是只调用一次?
构造函数和析构函数被调用了5次,对吧。
因为控制流跨越了 5 次 cat
的初始化,以及 5 次其作用域的结束(循环块的结束 '}')。
实际上,您在最外面的大括号中看到的实际上是在循环条件 (i < 5) 为真时重复的一个复合语句。