後,我做的,說C++數組delete操作符語法
Foo* array = new Foo[N];
我一直刪除了這樣
delete[] array;
不過,有時候我已經看到了這種方式:
delete[N] array;
因爲它似乎編譯和工作(至少在msvc2005),我想知道: 什麼是正確的方法來做到這一點? 爲什麼它以另一種方式進行編譯?
後,我做的,說C++數組delete操作符語法
Foo* array = new Foo[N];
我一直刪除了這樣
delete[] array;
不過,有時候我已經看到了這種方式:
delete[N] array;
因爲它似乎編譯和工作(至少在msvc2005),我想知道: 什麼是正確的方法來做到這一點? 爲什麼它以另一種方式進行編譯?
您可以點擊以下MSDN鏈接:delete[N] operator。該值被忽略。
EDIT 我試圖上VC9此示例代碼:
int test()
{
std::cout<<"Test!!\n";
return 10;
}
int main()
{
int* p = new int[10];
delete[test()] p;
return 0;
};
輸出是:測試!!
因此表達式被計算,但返回值被忽略。 我很驚訝地說至少,我想不出爲什麼這是必需的情況。
delete[] array;
是正確的形式。
正確的方法是做delete[] array;
。我甚至不知道delete[N] array;
會編譯(我懷疑它應該)。
第二種情況是否正確我建議使用第一種,因爲它不太容易出錯。
Visual Studio編譯了很多它不應該的東西。
「Visual Studio編譯了很多它不應該的東西。」阿門。 – sbi 2009-11-17 10:45:35
delete [N] array
無效。它沒有在C++標準中定義:5.3.5節將刪除表達式定義爲delete expr
或delete [] expr
,除此之外別無其他。它不會在gcc(版本4.1.2)上編譯。至於爲什麼它在Visual C++中編譯:請問微軟。
如果它有效,它是一個非標準擴展。
delete [] array;
是正確的形式。
delete array;
有時也會工作,但依賴於實現(因此是錯誤的)。
對於非數組指針,明確定義了第二種形式(不包含括號)的行爲。它的行爲不是。無論如何,我想這就是爲什麼有人投你一票。 – 2009-11-17 13:33:04
'刪除數組'在任何意義上都不「起作用」,除非你的意思是它不會使程序崩潰。它不會回收首先分配的所有內存,如果它沒有崩潰,它只會在數組中的第一個對象上運行析構函數。 (如果你做了新的Foo [0]',那麼這也是一個錯誤。) – Bill 2009-11-17 14:39:48
@Bill:我希望我能夠評論評論。你的陳述有時候可能是真的,有時候它可能不對。在這裏看到:http://stackoverflow.com/questions/1553382/1553407#1553407和我的評論在這裏:http://stackoverflow.com/questions/1553382/1553391#1553391 – sbi 2009-11-17 15:28:05
第一點:幾乎從來沒有一個很好的理由使用新的或刪除的數組形式開始 - 使用std :: vector(或其他容器)。第二:在C++的黑暗時代,你必須指定你正在刪除的數組的大小,所以如果你使用了x = new T[N]
,那麼匹配的刪除是delete [N] x
。明確指定大小的要求在以前被移除了long,但是一些編譯器(特別是那些關心與古代代碼的向後兼容性的編譯器)仍然允許它。
,除非你真的需要保持一個古老的編譯器(一個是20歲左右)兼容,你不應該使用它。然後再說一遍,除非你需要與一個如此老的編譯器保持兼容,否則它不支持任何標準容器,你不應該首先使用new或delete的數組形式。停下來!
感謝您的歷史課。 然後,如果我必須通過的,動態數組說,花車,向第三方libray,這是正確的方式做到這一點王氏標準集裝箱? – raven 2009-11-17 15:28:53
使用矢量。當您需要傳遞地址/長度時,請使用&vec [0]和vec.size()。 – 2009-11-17 15:55:52
+1:在標準的'94草案中,語法已經是'delete []'了。同一年,Design and Evolution(p218)評論說這個語法「...證明太容易出錯,所以跟蹤元素數量的負擔被放在實現上。」 – 2009-11-17 17:42:43
+1。有用的信息 – 2009-11-17 11:01:46
是否意味着你可以刪除[2N]數組;那會編譯 – 2009-11-17 11:03:16
謝謝,這就是我一直在尋找的東西。 – raven 2009-11-17 11:07:58