[英]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.