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

fla*_*nik 32 c++ arrays standards new-operator

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

int count = 10;
A *arr = new A[count];
Run Code Online (Sandbox Code Playgroud)

我看到它调用了一个默认的构造函数A count.其结果是arr已经count初始化的类型的对象A.但是,如果我使用相同的东西来构造一个int数组:

int *arr2 = new int[count];
Run Code Online (Sandbox Code Playgroud)

它没有初始化.所有值都类似于-842150451int的默认构造函数将其值赋值给0.

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

sha*_*oth 54

接受的答案,以一个非常类似的问题.使用时,new[]每个元素都由默认构造函数初始化,除非类型是内置类型.默认情况下,内置类型保持单一化.

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

new int[size]();
Run Code Online (Sandbox Code Playgroud)

  • 哇,我实际上并不知道你可以添加大括号来默认初始化内置类型.我已经使用C++多年了.那要么令人兴奋,要么非常难过! (14认同)