2015-10-25 41 views

回答

2

我聽說過,對於基元「自動」清理髮生時,他們超出了範圍,但這不會發生類或結構。這是真的?

不,這是不正確的。存儲類型以及對象是否爲內置類型是C++中完全正交的概念。如果對象具有自動存儲,則在其範圍退出時發生「清除」,而不管其類型如何。

在這兩個發佈示例中,必須調用delete[]delete以釋放動態分配的內存並調用需要調用的任何析構函數。

+0

謝謝 - 在上面顯示將在存儲器被釋放任一示例中,從而不必使用刪除關鍵字,出於任何原因? – Irongrave

+0

@Irongrave你必須分別調用'delete []'和'delete',因爲兩者都有動態(免費存儲)分配。 – juanchopanza

1

這很容易記住。每當調用new時,必須調用delete。因爲new int[5]在堆上保留了5個值得記憶的整數,所以必須在某點上釋放它。
這同樣適用於new Foo,它將堆內存中的一個Foo歸零。 (然後調用構造等)

要使用此格式保留存儲器堆棧上:

{ 
    int fiveInts[5]; 
    Foo foo; 
    //valid here 
} 
//foo's destructor has been called 
//and fiveInts is out of scope (but has no destructor (practically speaking)) 
相關問題