【发布时间】:2011-11-21 02:03:18
【问题描述】:
我有一个对象数组:
Square sq[81];
我认为它使用默认构造函数来创建每个。
当我通过一个 for 循环来初始化每个对象时,它会为数组中的每个 Square 对象调用析构函数。
for (int k=0; k<9; k++) {
for(int j=0; j<9; j++) {
sq[count++] = Square(k, j);
}
}
Square(k, j)被调用的时候,是不是删除了sq[]中的对象,然后新建了一个?
【问题讨论】:
-
看看各种构造函数、析构函数和赋值运算符何时发生可能很有启发性:codepad.org/S1iH4cWD
-
@Bill:非常好,除了在
op=期间复制 dtor 计数时会令人困惑。重点是识别对象,而不是内容 :) 所以,codepad.org/ofmZpriv 可能更有意义。 -
@Tomalak:谢谢!我使用 dtor 计数来证明数组中的对象已被覆盖。更完整的示例可以分别跟踪初始值和分配值。我将把它作为练习留给读者。 :)
-
@Tomalak:好吧,你说服了我。 ^^codepad.org/JPE8uYVO
-
@Bill:现在这只是令人困惑!
标签: c++ arrays destructor