類對象的構造
再次閱讀與總結C++程序設計語言,依然可以引起深入的思考與再思考~~~
=======================================================================================
考慮創建對象(特別是類對象)的各類不一樣方式,以及它們在後來怎麼銷燬。一個對象能夠經過以下方式創建:
- 一個命名的自動對象,當程序的執行每次遇到它的聲明時創建,每次程序離開它所出現的塊時銷燬;
- 一個自由存儲對象,經過new運算符創建,經過delete運算符銷燬;
- 一個非靜態成員對象,做爲另外一個類對象的成員,在它做爲成員的那個對象創建或者銷燬時,它也隨之被創建或銷燬;
- 一個數組元素,在它做爲元素的那個數組被創建或銷燬時創建或銷燬;
- 一個局部靜態對象,在程序執行中第一次碰見它的聲明時創建一次,在程序終止時銷燬一次;
- 一個全局對象、名字空間的對象、類的靜態對象,它們只在「程序開始時」創建一次,在程序終止時創建一次;
- 一個臨時對象,做爲表達式求值的一部分被創建,在它所出現的那個完整表達式的最後被銷燬;
- 一個在分配操做中由所提供的參數控制,在經過用戶提供的函數得到的存儲裏放置的對象;
- 一個union成員,它不能有構造函數和析構函數
面向對象 --- 類 忠告
- 用類表示概念
- 只將public數據(struct)用在它實際上僅僅是數據,並且對於這些數據成員並不存在不變式的地方;
- 一個具體類型屬於最簡單的類。若是適用的話,就應該儘量使用具體類型,而不要採用更復雜的類,也不要使用簡單的數據結構;
- 只將那些須要直接訪問類的表示的函數做爲成員函數;
- 採用名字空間,使類與其協助函數之間的關係更明確;
- 將那些不修改對象值的成員函數作成const成員函數;
- 將那些須要訪問類的表示,但無需針對特定對象調用的成員函數作成static成員函數;
- 經過構造函數創建起類的不變式;
- 若是構造函數申請某種資源,析構函數就應該釋放這一資源;
- 若是在一個類裏有指針成員,它就須要有複製操做(包括複製構造函數和複製賦值);
- 若是一個類裏有引用成員,它就可能須要有複製操做(複製構造函數和複製賦值);
- 若是一個類須要複製操做或析構函數,它多半還有構造函數、析構函數、複製賦值和複製構造函數;
- 在複製賦值裏須要檢查自我賦值;
- 在寫複製構造函數時,請當心的複製每一個須要複製的元素(小心默認的初始式);
- 在向某個類中添加新成員時,必定要仔細檢查,看是否存在須要更新的用戶定義構造函數,以使它可以初始化新成員;
- 在類聲明裏須要定義整型常量時,請使用枚舉;
- 在構造全局的和名字空間的對象時,應避免順序依賴性;
- 用第一次開關去緩和順序依賴性問題;
- 請記住,臨時對象將在創建它們的那個完整表達式結束時銷燬。