簡體   English   中英

new[] 是否調用 C++ 中的默認構造函數?

[英]Does new[] call default constructor in C++?

當我使用 new[] 創建我的類數組時:

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

我看到它調用了A count次的默認構造函數。 結果arrcountA類型的初始化對象。 但是如果我使用同樣的東西來構造一個 int 數組:

int *arr2 = new int[count];

它沒有被初始化。 盡管 int 的默認構造函數將其值分配給0 ,但所有值都類似於-842150451

為什么會有如此不同的行為? 默認構造函數不只為內置類型調用嗎?

請參閱一個非常相似的問題 的已接受答案 當您使用new[]每個元素均由默認構造函數初始化,但類型為內置類型時除外。 內置類型默認情況下保持統一。

內置類型數組默認初始化使用

new int[size]();

內置類型沒有默認構造函數,即使它們在某些情況下可以接收默認值也是如此。

但是在您的情況下, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM