類的私有成員訪問方式:數組
被該類的成員函數訪問(類的對象都不能直接訪問);函數
友元函數能夠訪問,在該類中定義友元函數(友元函數也能夠訪問該類的保護成員)spa
例:class A{friend void func{};}; func函數稱爲類A的友元函數,可訪問類A的私有保護成員;
指針
友元類,例: class A{ friend class B;} ; class B{}; 類B爲類A的友元類,可訪問A的私有成員。code
new的使用:對象
判斷是否分配成功:內存
new失敗會拋 bad_alloc異常,除非是nothrow,這個就判斷是否爲NULLssl
對於throw new,catch bad_alloc異常;對於nothrow new,檢查返回的指針是否爲NULL;string
new( nothrow )type; //nothrow newclass
待理解:(上述兩種new均可以經過set_new_handler在bad_alloc被拋出或者nothrow new返回NULL前對分配失敗的狀況進行處理。)
爲何用new不用malloc? 用new的時候會發生兩件事,首先,內存被分配,而後,爲被分配的內存調用一個或多個構造函數,而malloc只會分配內存。
Delete的使用:
有兩種使用形式,delete p,delete []p,第一種是刪除一個對象,第二種是刪除多個對象,必須對應以前new的操做。
例:(來源:Effective C++)
string *stringptr1 = new string; string *stringptr2 = new string[100]; ... delete stringptr1;// 刪除一個對象 delete [] stringptr2;// 刪除對象數組
typedef string addresslines[4]; //一我的的地址,共4行,每行一個string //由於addresslines是個數組,使用new: string *pal = new addresslines; // 注意"new addresslines"返回string*, 和 // "new string[4]"返回的同樣 delete時必須以數組形式與之對應: delete pal;// 錯誤! delete [] pal;// 正確