new\[\] 是否在 C 中调用默认构造函数?

新手上路,请多包涵

当我使用 new[] 创建我的类数组时:

 int count = 10;
A *arr = new A[count];

我看到它调用了 A count 次的默认构造函数。结果 arr 具有 count 类型为 A 的初始化对象。但是如果我用同样的东西来构造一个 int 数组:

 int *arr2 = new int[count];

它没有被初始化。所有值都类似于 -842150451 尽管 int 的默认构造函数将其值分配给 0

为什么会有如此不同的行为?默认构造函数是否仅针对内置类型调用?

原文由 flashnik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 571
2 个回答

请参阅 一个非常相似的问题 的已接受答案。当您使用 new[] 每个元素都由默认构造函数初始化,除非该类型是内置类型。默认情况下,内置类型是未初始化的。

拥有内置类型数组默认初始化使用

new int[size]();

原文由 sharptooth 发布,翻译遵循 CC BY-SA 3.0 许可协议

内置类型没有默认构造函数,即使它们在某些情况下可以接收默认值。

但在你的情况下, new 只是在内存中分配足够的空间来存储 count int 对象,即。它分配 sizeof<int>*count

原文由 Cedric H. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题