2012-06-27 44 views
0

這是一個很好的做法,還是僅僅取決於?我是否應該始終使用C++初始化類中的每個數據成員?

謝謝。

+0

是的,你應該。 (用null等初始化指針var)。 – adatapost

+0

如果我沒有,我會在GCC上得到錯誤。被初始化是一件好事,在某些情況下,C++ 11使它非常容易,允許使用如下語法:'int intMember = 5;',它被填充到任何未指定的初始化中。這也提出了一點,如果你不初始化一個成員,它仍然會在構造函數的主體之前被自動初始化。 – chris

+0

不要打折初始化的「文檔」方面。讀取代碼的每個人都可以看到起始狀態,而不必在可以設置默認值的不同文件之間跳動,並閱讀標準以查看如果未指定默認值會發生什麼情況。它使你的意圖清晰。 – John3136

回答

2

只有當你要在性能關鍵的代碼中默認構建大量的POD對象,然後填充它時,纔會有意義的初始化。他們以後有效的數據 - 例如如果您要創建一個包含一百萬個對象的數組,然後用有效數據填充數組的對象。在這種情況下,你可能想要避免初始化,因爲當你只是在之後再次覆蓋它時,會浪費CPU週期來將所有內容全部清零。

但是,如果你這樣做,一定要把/*眼斂評論大量的*在你的類的.h文件中/警告有關用戶的你在其他任何徹底做什麼,爲什麼,並記錄程序員的文檔你維護。追蹤未初始化值的錯誤並沒有多少樂趣......

0

在書:「關於C++反芻」,由安德魯·柯尼希和芭芭拉哞,第4章

是否每個構造函數需要初始化每一個數據成員? 這並非總是如此,有時你的數據成員有它的意義,當你的對象存在一段時間,這取決於。

我擁有的這本書不是原來的英文版本,所以我有點翻譯它。如果你想知道更多,請閱讀整章4 :)

1

經驗法則是一個對象在一個未初始化的狀態下永遠不應該存在。實現這一點的唯一方法是在構建過程中初始化所有成員變量。處於未初始化狀態的對象與無效狀態之間存在差異。未初始化狀態發生在構造期間成員變量未初始化對象時。由於變量可能包含未知值,因此依賴它們的任何成員函數可能會間歇性地表現不同。無效狀態將變量初始化爲默認值,以提供一些期望,該對象在構建後總是表現相同。

0

永遠不要說永遠。

這是一個非常非常好的實踐初始化每個數據成員。但有時候,在非常特殊的情況下,如果要創建大量對象(這將花費比您想要的更多的CPU週期),您可能需要跳過一些初始化操作,稍後您將初始化它們,並且您可以保證在初始化之前沒有數據成員會被使用。