【问题标题】:Object scope and lifetime in a for loopfor循环中的对象范围和生命周期
【发布时间】:2015-11-20 11:27:28
【问题描述】:

假设我有以下代码。

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

【问题讨论】:

  • 我猜你可以不用问就在别处找到答案
  • 为什么不在构造函数/析构函数中加入一些cout?实例答案

标签: c++ scope object-lifetime


【解决方案1】:

构造函数和析构函数被调用了 5 次,对。

因为控制流经过了 5 次 cat 的初始化,以及 5 次其范围的结束(循环块的结束 '}')。

实际上,您在最外面的大括号中看到的实际上是在循环条件 (i

【讨论】:

  • 所以本质上,一个for循环实际上是在每个i处退出,然后重新进入括号?
  • push_back() 中的复制/移动构造函数怎么样?它也被调用了 5 次
  • push_back 中的复制构造函数当然和 push_back 本身一样频繁地调用 5 次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多