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

时间:2010-08-26 13:24:12

标签: c++ arrays standards new-operator

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

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

我发现它调用了A count次的默认构造函数。因此,arr具有count类型A的初始化对象。 但是,如果我使用相同的东西来构造一个int数组:

int *arr2 = new int[count];

它未初始化。所有值都类似-842150451,但int的默认构造函数将其值赋予0

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

3 个答案:

答案 0 :(得分:50)

请参阅the accepted answera very similar question。当您使用new[]时,默认构造函数会初始化每个元素,除非类型是内置类型。默认情况下,内置类型保持单一化。

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

new int[size]();

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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