C++:为什么在声明对象数组时调用构造函数

In C++: why does a constructor get called when an array of objects is declared?

本文关键字:数组 调用 构造函数 对象 声明 为什么 C++      更新时间:2023-10-16
MyClass mc2[] = { MyClass(),  MyClass() };  //this calls the constructor twice
MyClass mc1[4]; // this calls the constructor 4 times. Why?

所以,我的问题是:为什么没有初始化的对象数组的声明会导致调用默认构造函数?

在C++中,大小为 4 的MyClass数组是四个实际对象。它有点像包含该类型的四个成员的结构,尽管当然您可以使用不同的语法访问成员,并且存在其他技术差异。

因此,定义该数组会导致构造

4 个对象的原因(并且在大致相同的情况下(,因为定义该类型的一个对象会导致构造该对象。

将这种状态与另一种编程语言进行对比:在 Java 中,大小为 4 的 MyClass数组只有四个指针,允许为空。因此,创建它不会创建任何MyClass对象。

所以,我的问题是:为什么一个对象数组的声明 没有初始化导致调用默认构造函数?

因为这就是C++的工作方式。

MyClass mc1[4]几乎就像您创建了四个不同的MyClass对象:

MyClass mc1_1;
MyClass mc1_2;
MyClass mc1_3;
MyClass mc1_4;
在具有默认构造函数

的类中,这很自然地意味着默认构造函数用于初始化每个对象。