C/C++記憶體釋放應注意的問題

yangchuankai發表於2014-03-29

程式設計時最應該注意的是堆上的記憶體的申請和釋放,防止記憶體洩露

     eg: void f()

           {

                int *p=new int[10];

            }

     理解為:在棧的記憶體中存放一個指向堆記憶體的指標P;(就是在棧的記憶體中存放了堆記憶體中10個int的記憶體塊的首地址)

3、記憶體洩露問題應該注意堆和系統資源(如HANDLE,GDI,SOCKET等)。

4、區分深拷貝和淺拷貝的區別:

        深拷貝是開闢新的記憶體空間,所有物件和變數都重新賦值,包括指標變數;淺拷貝則只是對指標變數地址的賦值,指標指向的內容沒有重新開闢記憶體,在該方式下如果要刪除該指標物件時候要特別小心,容易造成,無法定址。

        因此,標準的拷貝建構函式的定義步驟為:

        a.判斷是否自身賦值;

        b.清除原指標指向的資料,並刪除指標;(delete []ptr;//刪除指標陣列的內容,delete ptr;//刪除指標內容;ptr=NULL;//刪除指標)

        c.開闢新的記憶體空間;

        d.重新賦值;

        f. 返回*this;

 

相關文章