2013-12-10 61 views
0

我發現了一些與QtCreator玩的以及我在使用gcc的析構函數中遇到的錯誤:默認情況下,指針不等於NULL;這需要手動添加(在我的情況下構造函數)。這是正確的嗎?怎麼來的?他們的默認值是什麼?在Qt中默認沒有與NULL關聯的指針

+7

這就是C++中* all *指針的情況。如果你想讓它們爲NULL,分配它們。 –

+2

如果初始化變量失敗,大多數編譯器會發出警告。將警告視爲錯誤,並且您已將自己'遮蓋'。 – ChristopheD

+0

@MarkRansom:那麼我可以向你保證,在沒有_initialization_的情況下定義的指針會通過gcc的測試my_pointer == NULL。我認爲這是C++標準。感謝您澄清;) – Liam

回答

5

指針與其他任何基本類型一樣,開始處於未初始化狀態,這意味着它們可能具有任何值(實際上,它是未定義的行爲,可以從任何未初始化的變量中讀取)。

另一方面,結構和類的構造函數保證在創建類實例時運行,這意味着,如果它被正確寫入,類將開始處於有效狀態。

+3

事實是,它取決於編譯器的實現。但是由於標準沒有提及初始化......(除了靜態變量,我相信)。 [This](http://stackoverflow.com/a/2218275/2651145)有更多的初始化信息。 –

1

除非到位構造函數,沒有默認值

看着int * x;x有一個未定義的值

的std :: string是指一類具有構造器因此與std::string x有一個定義值爲x:「空字符串構造函數(默認構造函數)構造一個空字符串,長度爲零個字符。」