前言
看見重複的代碼就想封裝,這個習慣轉入c++之後也沒改,即使效率有所影響也盡力去封裝,比如在類的析構函數裡面釋放指針,一個個判斷然後一個個delete然後再設定為null,就想着寫一個公用釋放指針的方法,也就有了下面的問題一。
文章
正文
一、問題函數
本意:傳入一個指針,判斷指針是否為空,不為空的話就釋放掉,這樣在析構函數裡面不用一段段重複寫函數内的那段代碼,封裝後隻用寫如"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++吧,通過這個例子對指針有了新的認識,目前的了解是函數傳遞指針隻是傳遞了一個位址而已,也就是拷貝了指向同一個位址的指針,而傳值是拷貝的一份資料,不同的是拷貝的指針能改變改位址的資料。
轉載:http://www.cnblogs.com/over140/archive/2010/04/18/1713595.html