簡體   English   中英

C ++默認構造函數不初始化指向nullptr的指針?

[英]C++ default constructor does not initialize pointer to nullptr?

我想知道我的班級中是否有A*成員,如果我有這種形式的班級構造函數,我們不應該自動設置為nullptr

class MyCLass
{
    A* m_pointer;

public:
    MyCLass()
    {
    }
};

如果我做MyCLass* o = new MyCLass;這是否重要MyCLass* o = new MyCLass; 或者我做MyCLass* o = new MyCLass(); 在C ++ 11中?

指針是“POD類型”......又名“普通舊數據”。 這里總結了默認初始化時間和位置的規則:

C ++中POD類型的默認初始化

所以不行。 對於類的構造函數是什么並不重要,如果它是一個原始指針作為類的成員。 你實際上並沒有實例化這個類。 所以像Foo *std::vector<Foo> *或任何以*結尾的內容都不會被初始化為nullptr。

智能指針類不是POD。 因此,如果您使用正在創建類實例的unique_ptr<Foo>shared_ptr<Foo> ,那么如果您沒有初始化它們,那么它確實有一個構造函數使它們實際為null。

如果我做MyCLass * o = new MyCLass,這是否重要; 或者我做MyCLass * o = new MyCLass(); 在C ++ 11中?

請問每個問題一個問題。

類型名稱后的括號是否與new有區別?

默認構造函數(如果是編譯器生成的或默認的)將默認初始化所有成員。 任何用戶定義的構造函數都將類似地默認初始化初始化列表中沒有顯式初始值設定項的所有成員。

默認初始化意味着“調用類的默認構造函數,保留其他所有未初始化的”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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