for循环中的对象范围和生命周期

时间:2015-11-20 11:27:28

标签: c++ scope object-lifetime

假设我有以下代码。

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次还是只调用一次?

1 个答案:

答案 0 :(得分:2)

构造函数和析构函数被调用5次,正确。

因为控制流量超过cat初始化的5倍,并且是其范围结束的5倍(循环块的关闭&#39;}&#39;)

实际上,你在最外面的大括号中看到的实际上是在循环条件(i&lt; 5)为真时重复的一个复合语句。