繁体   English   中英

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

[英]Does new[] call default constructor in C++?

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

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

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

int *arr2 = new int[count];

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

为什么会有如此不同的行为? 默认构造函数不只为内置类型调用吗?

请参阅一个非常相似的问题 的已接受答案 当您使用new[]每个元素均由默认构造函数初始化,但类型为内置类型时除外。 内置类型默认情况下保持统一。

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

new int[size]();

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

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

原始类型默认初始化可以通过以下 forms 完成:

    int* x = new int[5];          // gv gv gv gv gv (gv - garbage value)
    int* x = new int[5]();        // 0  0  0  0  0 
    int* x = new int[5]{};        // 0  0  0  0  0  (Modern C++)
    int* x = new int[5]{1,2,3};   // 1  2  3  0  0  (Modern C++)

int不是类,它是内置数据类型,因此没有为其构造函数的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM