VC++編程好習慣

來源:互聯網
上載者:User

1.delete 之後最好把指標置為NULL

發現在 VC++6裡面,對一個指標執行delete,釋放掉指標所指向的記憶體空間之後,這個指標的值卻沒有相應改變,而仍然是原來的值,而這個地址現在已經指向了一個不屬於它的記憶體空間(也就是說這個指標已經變成了野指標),如果接下來又不小心使用了*p,則會導致一個非法記憶體訪問。所以建議在使用delete之後,最好再馬上把指標置為NULL,以防止不小心導致的非法訪問;

下面的代碼將建立一個由delete所產生的野指標:
void CFullScreenDemoDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 CString s;

 char *p = new char;
 p[0]='a';

 s.Format ("%d",p);
 MessageBox(s);
 MessageBox(p);

 delete p;

 s.Format ("%d",p);
 MessageBox(s);
 MessageBox(p);
}

2.比較的時候 ,常數寫在前;

比較兩個資料的時候,如果其中一個是常數,建議這樣寫:if ( 0 == x )

呵呵,至於為什麼,就不用我多說了吧,相信用C/C++的同行,都曾有過把

==誤寫為=的痛苦經曆,而且VC++6即不會報錯(這是由C/C++規範決定的,是合法的,編譯器不能報錯),也不會警告(編譯器警告一下是應該的),可能會把人弄得焦頭爛額,遍地找不到程式錯在哪裡。

而這種把常數寫在前面的寫法,就徹底杜絕了這種錯誤的發生。當再發生把==誤寫為=的時候,代碼就會是這樣:

 if ( 0=x )

編譯器肯定要報錯的;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.