C++防止內存泄漏簡單方法

    在Symbian C++編程程中遇到的一個最棘手問題就是內存泄露,如果內存泄露沒有用正確方法去解決,則很容易衍生出一些難以解釋的錯誤。 爲此我專門總結出幾條防止內存泄露的原則。


四種基本的類

    T類一般都是在棧上分配的,不需要明確的分配操作,也不需要實現複製構造函數。T類的析構函數不會被執行,所以T類的成員數據不可以使用指針,引用,句柄或含有析構函數的類的類型,所以T類的成員數據只能是固有類型和其他T類類型。基本數據類型都屬於T類範疇,如TInt、TReal。T前綴也用於枚舉類型。在Symbian中,T類型代替了C++中的結構體。
    C類直接或間接地繼承了CBase類。C類有兩個特點:安全的構造和析構、零值初始化。C類一般使用兩級構造函數來完成構造,釋放資源通過析構函數完成。初始化時,C類的成員變量都會被賦爲零值。C類對象必須在堆內存中分配空間。
    R類是訪問系統資源的類,也稱爲資源類。所以也可以說R類實際就是訪問系統資源的一個代理,因爲在Symbian中,資源由服務器程序進行管理,用戶程序需要通過R類對象訪問和操作服務器進程管理的系統資源。使用R類之前,要調用諸如Open(),Create()或Initialize()等函數來分配資源和設定句柄成員變量,用完之後,要通過相應的Close()或Reset()函數來釋放資源和重置句柄值。否則會有內存泄露。
    在Symbian OS中,M類稱爲混合類,主要爲Symbian SDK中的引擎或工具提供對外接口,也可以稱爲接口類,也就是C++中的純虛類,所以M類中的成員函數都是虛函數且不需要實現,其主要作用就是提供接口;在Symbian OS中,M類通常定義爲回調接口(callback)或監聽器接口(observer);


防止內存泄露的簡單做法
    四種基本的類的的使用各有各的特點,C類和R類的資源是必須釋放的,T類可以當成基本類型來使用,M類只是相當於Java語言中的接口。
    造成內存泄露的主要是C類和R類,針對這兩類,我總結出了幾條簡單的原則,可以避免大部分的內存泄露問題。

  1. T類在棧空間內可以隨便使用。
  2. 成員變量不能入清除棧,必須在析構函數裏釋放。釋放時,C類用delete,R類一般用Reset。
  3. 對成員變量賦值前要先釋放其資源並將其賦爲空值(R類只需釋放)。
  4. 函數體(準確點說,是作用域)內使用的C類或R類的局部變量時,應該創建後立即壓入清除棧中。在退出函數體之前記得出棧並視情況銷燬。如返回值不出棧則函數名應該加上“C”後綴。
  5. 有可能出現異常的函數,如不處理異常則函數名必須加“L”後綴。

 

                                                                                              ——摘自畢業論文

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章