MyClass mc2[] = { MyClass(), MyClass() }; //this calls the constructor twice
MyClass mc1[4]; // this calls the constructor 4 times. Why?
所以,我的问题是:为什么没有初始化的对象数组的声明导致默认构造函数被调用?
答案 0 :(得分:8)
在C ++中,大小为4的MyClass
数组是四个实际对象。它有点像包含该类型的四个成员的结构,当然您使用不同的语法访问成员,并且还存在其他技术差异。
因此,定义该数组会导致构造4个对象的原因相同(并且在大致相同的情况下),因为定义该类型的一个对象会导致构造一个对象。
将这种状态与另一种编程语言进行对比:在Java中,大小为4的MyClass
数组只有四个指针,允许为空。因此,创建它不会创建任何MyClass
个对象。
答案 1 :(得分:5)
所以,我的问题是:为什么声明一个对象数组 没有初始化会导致调用默认构造函数吗?
因为这就是C ++的工作方式。
MyClass mc1[4]
几乎就像您创建了四个不同的MyClass
对象:
MyClass mc1_1;
MyClass mc1_2;
MyClass mc1_3;
MyClass mc1_4;
在具有默认构造函数的类中,这很自然意味着默认构造函数用于初始化每个对象。