1.C++內存分區(qū)
1.在了解構造函數之前先弄清楚C++相關的內存分區(qū)內容
1.棧區(qū):在定義一個變量或指針時開辟的內存空間裁赠,棧區(qū)由系統(tǒng)分配和回收,不需要程序員關心
2.堆區(qū):在使用new進行分配的內存辩块,堆區(qū)的內存在不使用的時候需要使用delete進行回收呻拌,需要程序員自己管理
2.對象的生命歷程
2.對象結構
定義一個類的代碼不開辟內存空間滞伟,屬于代碼區(qū)。當對該類進行實例化之后馍盟,得到的對象在棧區(qū)分配到了相應的內存空間,用于存儲各自對象的內容茧吊,但是這些對象對應的代碼區(qū)還是只有一份贞岭;
3.對象的初始化
當得到對象的時候,如果不對對象進行初始化搓侄,就不能對對象進行操作瞄桨。對象的初始化也分情況,具體分為兩種情況:
4.構造函數
注意:1.一個類可以沒有默認構造函數讶踪,有其他構造函數一樣可以進行實例化芯侥;
1.初始化列表
初始化列表的使用語法是在構造函數后面對成員變量進行賦值,初始化列表可以對常量進行賦值俊柔,語法是
constructor():param1("string s"),param2(int i)
使用括號進行賦值而不是=
2.拷貝構造函數
拷貝構造函數是一種特殊的構造函數筹麸,它在創(chuàng)建對象時,是使用同一類中之前創(chuàng)建的對象來初始化新創(chuàng)建的對象雏婶∥锔希拷貝構造函數通常用于:
通過使用另一個同類型的對象來初始化新創(chuàng)建的對象。
復制對象把它作為參數傳遞給函數留晚。
復制對象酵紫,并從函數返回這個對象。
如果在類中沒有定義拷貝構造函數错维,編譯器會自行定義一個奖地。如果類帶有指針變量,并有動態(tài)內存分配赋焕,則它必須有一個拷貝構造函數参歹。
拷貝構造函數的最常見形式如下:
classname (const classname &obj) {
// 構造函數的主體
}
拷貝構造函數的調用:
A a1 ;
A a2 = a1;
A a3(a1);
3.構造函數總結
注意:拷貝構造函數的參數是確定的,不能重載
5.析構函數
類的析構函數是類的一種特殊的成員函數隆判,它會在每次刪除所創(chuàng)建的對象時執(zhí)行犬庇。
析構函數的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為前綴侨嘀,它不會返回任何值臭挽,也不能帶有任何參數。析構函數有助于在跳出程序(比如關閉文件咬腕、釋放內存等)前釋放資源欢峰。
6.總結
1.類
2.對象