請考慮下面的代碼:新的或新的[]操作
typedef SomeType type_t[2];
SomeType * arr1 = new type_t; //new or new[] ???
type_t * arr2 = new type_t[3]; //new or new[] ???
根據標準,該標準的new
版本將在1次和第2次的情況下(new
或new[]
)被調用,如何刪除arr1
和arr2
(與delete
或delete[]
)?
請考慮下面的代碼:新的或新的[]操作
typedef SomeType type_t[2];
SomeType * arr1 = new type_t; //new or new[] ???
type_t * arr2 = new type_t[3]; //new or new[] ???
根據標準,該標準的new
版本將在1次和第2次的情況下(new
或new[]
)被調用,如何刪除arr1
和arr2
(與delete
或delete[]
)?
第一種情況分配一維數組,第二種情況爲二維數組。他們都必須通過delete[]
發佈,否則你會得到未定義的行爲。
在兩種情況下它都將使用new[]
。您可以通過定義operator new[]
爲SomeType
並在屏幕上打印某些內容來自行驗證。你會看到它會在兩種情況下打印。
說實話,這可能是不好的做法 – deek0146 2011-03-20 14:23:41
這絕對是不好的做法,並可能導致某人頭痛的道路。 – 2011-03-20 16:13:09