2010-03-21 70 views
2

我不知道,如果這兩個作品的刪除:刪除單個對象數組?

p = new int[1]; 

delete p 

delete [] p; 

如果這兩個作品,正是上述兩個delete S之間的區別?

+1

'new'和'delete'必須匹配,否則你的行爲不確定。似乎在一個平臺上工作是一個未定義行爲的可能結果,正如一切都非常糟糕。不要這樣做。 – GManNickG 2010-03-21 04:01:36

回答

1

delete p只刪除一個元素。 delete [] p刪除一個數組。如果您使用new type[],則使用delete []

如果你是new有一個[],那麼delete有一個[]

順便說一句,必須有一個確切的重複這個地方。

4

一個實例的數組仍然是一個數組。根本沒有特殊情況,所以你需要把它看作一個數組而不是一個單一的對象。非數組delete可能會崩潰。

對象數組之前可能有一個表示數組大小的數字。如果是這種情況,delete[]而不是delete,足夠聰明,可以將正確的指針傳遞給free

2

他們是不是相同。即使delete p可以編譯,但可能會在運行時造成問題。

delete p將調用operator delete(void*)其中delete []將調用operator delete[](void*)delete[]的默認行爲是撥打delete,但如果已實施delete []的自定義運營商,則在您撥打delete時將不會被調用,並且您將遇到問題(可能是無聲的)。

好的經驗法則是,如果您在new中使用[],請在delete中使用它。

+0

不是一個經驗法則,一個要求。 – GManNickG 2010-03-21 23:38:13