2014-03-02 78 views
0

我已經在int main聲明瞭動態數組,所以我的問題是如何在析構函數中刪除和釋放該數組?否則我應該在主內部釋放它。
delte [] ptr ---
請回答這個簡單的問題給我。在此先感謝析構函數刪除主動聲明的動態數組

我也實現了類,但在主內部聲明動態數組,所以什麼是析構函數的使用?我應該刪除內部析構函數嗎?

+0

什麼析構函數? –

+0

'main'不是一個對象,它沒有析構函數。請在返回之前將其刪除。 (實際上,因爲程序正在退出,無論如何內存都會被操作系統回收,但它自己做的很好的形式和習慣。) – TypeIA

+0

析構函數(和構造函數)是對象(&結構)的成員函數。 'main'是一個經典函數,就像C中一樣。沒有這樣的析構函數。 –

回答

1

該程序本身沒有析構函數。它從main開始並在main結束時結束。如果您需要取消分配你的main開始分配一些內存,你應該main結束之前做到這一點:

int main() { 
    int* arr = new int[10]; 

    // Do lots of work 

    delete[] arr; 
} 

當然,這將是更好,如果你使用RAII封裝在一個類中該內存分配,所以你不必手動處理它。事實上,類型已經存在 - 標準庫容器(如std::vectorstd::array)。

+0

那麼什麼是在類中使用析構函數?我應該在這種情況下不使用它嗎? – user3215228

+0

@ user3215228類的析構函數應該釋放它在其構造函數中分配的所有內存。 –

+2

@ user3215228:如果您使用std :: vector(如您應該那樣),那麼* std:vector *析構函數將自動處理內存釋放。使用像std :: vector這樣的標準容器類將大大減少您必須編寫自己的析構函數的次數。 –

0

每個範圍都有退出點。你利用這個和析構函數來實現RAII成語。由於您沒有課程來包裝數據,因此您可以使用boost庫來定義在範圍退出時採取的操作。

{ // some scope, maybe that of a main function 
    double *new_ar = new double[15]; 
    BOOST_SCOPE_EXIT(new_ar) { 
     delete[] new_ar; 
    } BOOST_SCOPE_EXIT_END 
} // end of scope