C++:为什么在声明对象数组时调用构造函数
In C++: why does a constructor get called when an array of objects is declared?
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;
在具有默认构造函数的类中,这很自然地意味着默认构造函数用于初始化每个对象。
相关文章:
- C++从函数指针数组调用函数
- 使用数组数组调用 C++ 函数
- 空指针(为缺少的输出数组调用的 create() 在 create,文件 /home/m/OpenCV/modules/
- 模板 使用数据数组调用函数时扩展参数包
- 从数组调用方法不会更改对象
- 从基类数组调用派生函数
- "Color Game" - 从数组 C++ 调用随机
- 如何将结构数组调用以函数
- 如何使数组调用另一个类中的函数
- 使用数组调用函数
- 使用字符数组调用 scanf_s()
- 可变参数模板数组调用未定义的行为
- 使用带有对象的数组调用类中的方法,错误"non-class type",c++
- 从C++数组调用信息看似简单的问题
- 如何在 c++ 中从数组调用函数作为指针
- 使用二维数组调用返回结构
- 为什么不为对象数组调用析构函数
- 为另一个构造函数中的对象数组调用构造函数
- 如何为类 C++ 数组调用函数
- C++ 错误:使用 argc、*argv[] 和多维数组调用 void 函数时"no matching function to call to "