正文
一、問題函數
本意:傳入一個指針,判斷指針是否為空,不為空的話就釋放掉,這樣在析構函數裡面不用一段段重複寫函數内的那段代碼,封裝後隻用寫如"FreeObj(pBtnSave);"就可以了。
BOOL FreeObj(void* pObj)
{
if(pObj)
{
delete pObj;
pObj = NULL;
return TRUE;
}
return FALSE;
}
現實證明這種方法是行不通的,執行此方法後pBtnSave指針仍然不為空,然後想到了指針引用,能夠定義如下函數,但是使用起來很複雜(- - # 事實上不知道怎麼使用):
BOOL FreeObj(void* &pObj)
二、折中辦法
#define FreeObj(pObj) if(pObj){delete pObj;pObj=NULL}
隻是使用的話就不能帶分号了,因為這是一個宏,然後發現C++宏好強大,這樣寫效率也應該沒什麼好說的了,但是被同僚提醒,宏很強大但是切忌亂用。
三、 一個指針的引用例子
void FreeObj(int* &pObj)
if(pObj){
//測試代碼
int* a;
int b = 1;
a = new int;
*a = b;
FreeObj(a);
注意,如果測試代碼寫成如下則調用FreeObj(a)會出錯:
a = &b;
目前對C++涉足尚淺,有朋友能解答一下的話非常感謝!
四、摘錄C++ Primer中關于”函數參數聲明成引用還是指針呢?“ ,也許有所啟示。
引用必須被初始化為指向一個對象,一旦初始化了,它就不能再指向其他對象。指針可以指向一系列不同的對象也可以什麼都不指向。
結束語
感覺還沒入門,等項目稍微緩點了還是系統的來惡補C++吧,通過這個例子對指針有了新的認識,目前的了解是函數傳遞指針隻是傳遞了一個位址而已,也就是拷貝了指向同一個位址的指針,而傳值是拷貝的一份資料,不同的是拷貝的指針能改變改位址的資料。
本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/583034,如需轉載請自行聯系原作者