天天看點

MFC控件指針公用釋放方法[void* | 指針的引用]

一、問題函數

    本意:傳入一個指針,判斷指針是否為空,不為空的話就釋放掉,這樣在析構函數裡面不用一段段重複寫函數内的那段代碼,封裝後隻用寫如"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中關于”函數參數聲明成引用還是指針呢?“ ,也許有所啟示。

    引用必須被初始化為指向一個對象,一旦初始化了,它就不能再指向其他對象。指針可以指向一系列不同的對象也可以什麼都不指向。

繼續閱讀