Effective C++ 第四條 Make sure that objects are initialized before

確定對象被使用前已先被初始化
C++的對象創(chuàng)建之后,在某些情況下會被初始化,有些情況下卻不會,這一點難以靠記憶來分辨,所以需要在創(chuàng)建之后立即初始化,養(yǎng)成良好習慣。
在我們在C++中創(chuàng)建變量的時候,可能會忘記初始化
但是這樣存在潛在的風險,如果我們輸出 a 到屏幕上,可能會產生出無法預知的結果。因為我們申請的臨時變量是存儲在棧(stack)上的,在存儲a的位置可能之前存儲過別的變量,而臨時變量的釋放并不會將空間內容抹去,僅僅只是將 rsp 指針增大(stack由高地址向低地址增長),所以不對申請的變量初始化而直接使用是個不好的習慣。
賦值和初始化
賦值并不等于初始化,C++規(guī)定對象的成員變量初始化動作在進入構造函數(shù)本體之前
以類的構造函數(shù)為例
初始化的效果和賦值的效果是一樣的,但是初始化的效率比賦值要高很多。所以應該盡量采用初始化的方式來寫代碼。
初始化是有順序的,在類中,變量 m 先于變量 n 聲明,初始化同樣按照這個順序。
多文件編譯需要注意的事項
在本例子中,類A和類B在兩個編譯模塊中,其中A的成員函數(shù)fun通過調用b的op函數(shù)其作用,但是要考慮到,如果b沒有被初始化呢?那么程序就會出錯。在《Effective C++》中采取了一個辦法,就是使用 static 來解決,方法如下
利用static修飾產生一個b,這樣可以避免遇到b未初始化的問題。
標簽: