当我使用new []创建我的类数组时:
int count = 10;
A *arr = new A[count];
我发现它调用了A
count
次的默认构造函数。因此,arr
具有count
类型A
的初始化对象。
但是,如果我使用相同的东西来构造一个int数组:
int *arr2 = new int[count];
它未初始化。所有值都类似-842150451
,但int的默认构造函数将其值赋予0
。
为什么会有这么不同的行为?是否仅为内置类型调用默认构造函数?
答案 0 :(得分:50)
请参阅the accepted answer至a very similar question。当您使用new[]
时,默认构造函数会初始化每个元素,除非类型是内置类型。默认情况下,内置类型保持单一化。
要内置类型数组默认初始化使用
new int[size]();
答案 1 :(得分:3)
内置类型没有默认构造函数,即使它们在某些情况下可以接收默认值。
但在你的情况下,new
只是在内存中分配足够的空间来存储count
int
个对象,即。它分配sizeof<int>*count
。
答案 2 :(得分:0)
int
不是类,它是内置数据类型,因此没有为它调用构造函数。