在C ++中声明用户定义的类类型' for'环

时间:2015-07-14 06:41:46

标签: c++ loops for-loop variable-declaration

以下是在for循环中声明内置类型变量的相关问题:

但我想缩小这个主题,并询问声明用户定义的类类型变量,这些变量是使用合成继承或制作的,并且具有动态内存分配/释放(new / delete)的非平凡构造函数/析构函数。

a)  int count = 0;
    while(count < 1000000)
    {
        myClass myObj = some value;
        ++count;
    }

b)  int count = 0;
    myClass myObj;
    while(count < 1000000)
    {
        myObj = some value;
        ++count;
    }

c)  {
        int count = 0;
        myClass myObj;
        while(count < 1000000)
        {
            myObj = some value;
            ++count;
        }
    }
  1. 如果我必须在循环中使用用户定义的类变量,这是最佳实践,请在循环内部或外部声明它?
  2. 如果它将在循环内声明,那么每次迭代都会调用构造函数和析构函数链,但是我们将具有受限范围的优点(a)。

    如果我们在循环之外声明了一个变量,那么每次迭代只会调用赋值运算符,但是这个变量可以在循环范围(b)之外访问。

    1. 编译器是否足够聪明,可以将复杂数据类型声明优化为循环局部变量?内存分配是否发生一次,然后在每次迭代时重用相同的空间?

    2. 如果最佳实践是,在循环外声明变量,最好将循环放在范围内以限制范围(C)?

1 个答案:

答案 0 :(得分:1)

如果要在循环后立即销毁变量,可以使用其他范围封闭循环。这将限制对象的范围,并消除多个构造和破坏的开销。

{
    Object object;
    for (int i = 0; i < 100000; ++i) {
        // ....
    }
} // 'object' will be destroyed