1. 程式人生 > >使用C++為物件分配與釋放記憶體時的幾個好習慣

使用C++為物件分配與釋放記憶體時的幾個好習慣

在預設情況下,也就是不存在 operator new 的過載時,new一個自定義型別 ClassA 的物件時,C++ 會先呼叫 malloc 來申請一塊 sizeof(ClassA) 大小的記憶體(作業系統會記錄這塊記憶體的首地址與大小),然後呼叫 ClassA 的建構函式在這塊記憶體上初始化物件。此時,new 關鍵字會返回 malloc 得到的地址。呼叫delete時,會首先執行 ClassA 的解構函式,再呼叫 free 釋放 malloc 得到的指標。

 回想我們在一個函式體內定義一個變數的情況,在test函式中定義了a和b兩個變數,那麼在出這個函式之後,a和b就會被銷燬(棧上的操作)。那麼如果是是一個指向動態開闢的一塊空間的指標,我們都知道需要自己進行free,否則會造成記憶體洩漏。

說到這裡,其實在類裡面的情況和這是一樣的,這就是合成解構函式體為空的原因,函式並不需要做什麼,當類物件出作用域時系統會釋放你的內建型別的那些成員。但是像上面說的一樣,如果,我的成員裡有一個指標變數並且指向了一塊你動態開闢的記憶體,那麼像以前那樣也需要自己來釋放,此時就需要在解構函式內部寫你的釋放程式碼,這樣在呼叫解構函式的時候就可以把你所有的資源進行釋放。