[英]Does new[] call default constructor in C++?
当我使用 new[] 创建我的类数组时:
int count = 10;
A *arr = new A[count];
我看到它调用了A
count
次的默认构造函数。 结果arr
有count
个A
类型的初始化对象。 但是如果我使用同样的东西来构造一个 int 数组:
int *arr2 = new int[count];
它没有被初始化。 尽管 int 的默认构造函数将其值分配给0
,但所有值都类似于-842150451
。
为什么会有如此不同的行为? 默认构造函数不只为内置类型调用吗?
内置类型没有默认构造函数,即使它们在某些情况下可以接收默认值也是如此。
但是在您的情况下, 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.