新的[]在C++中调用默认构造函数吗?

新的[]在C++中调用默认构造函数吗?,c++,arrays,standards,new-operator,C++,Arrays,Standards,New Operator,使用new[]创建类数组时: int count = 10; A *arr = new A[count]; 我看到它调用了一个计数次数的默认构造函数。因此,arr拥有数个类型为a的初始化对象。 但是如果我用同样的东西来构造一个int数组: int *arr2 = new int[count]; 它没有初始化。所有值都类似于-84215041,尽管int的默认构造函数将其值分配给0 为什么会有如此不同的行为?默认构造函数不是仅为内置类型调用的吗?内置类型没有默认构造函数,即使它们在某些情况下可

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

int count = 10;
A *arr = new A[count];
我看到它调用了一个计数次数的默认构造函数。因此,arr拥有数个类型为a的初始化对象。 但是如果我用同样的东西来构造一个int数组:

int *arr2 = new int[count];
它没有初始化。所有值都类似于-84215041,尽管int的默认构造函数将其值分配给0


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

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

但在您的例子中,new只是在内存中分配足够的空间来存储count int对象,即它分配sizeof*count。

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

请参阅。使用new[]时,每个元素都由默认构造函数初始化,但类型为内置类型时除外。默认情况下,内置类型保持单元化

要初始化内置类型数组默认值,请使用

new int[size]();

@胶靴:INTI;不初始化名为i的变量。它声明了一个返回int的函数i@詹姆斯:在C++0x中,你终于可以说出你的意思了:intx{};:@詹姆斯,哎呀,我写了什么?谢谢你把这件事弄清楚。从int*i=new int;的错误推断@Cerdic,很抱歉发布了BS。哇,我真的不知道你可以将大括号添加到默认的初始化内置类型中。我已经用C++工作了很多年。这不是令人兴奋就是非常悲伤!可能重复的