1
考慮的以下代碼:訂單破壞堆棧/堆分配數組
struct A{...};
A a[100];
A* pa = new A[100];
delete[] pa;
是破壞了由標準定義的的a
/pa
元件的順序,或者它被實現定義(對於第二種情況operator delete[]
不是用戶定義的)。
考慮的以下代碼:訂單破壞堆棧/堆分配數組
struct A{...};
A a[100];
A* pa = new A[100];
delete[] pa;
是破壞了由標準定義的的a
/pa
元件的順序,或者它被實現定義(對於第二種情況operator delete[]
不是用戶定義的)。
數組元素將在施工的相反的順序破壞,與元件99
是第一破壞,然後元件98
,97
,96
...等和元件0
是最後。
查看isocpp析構函數FAQ。
從最新的草案5.3.5.6:
如果刪除表達式的操作數的值不是一個空指針值,刪除表達式將 調用析構函數(如果有的話)用於刪除數組中的對象或元素。 對於 數組,元素將按照地址遞減的順序銷燬(即按照構造函數的完成 ;請參閱12.6.2)的順序銷燬元素。
還有這從12.6.3(這是不特定的delete
關鍵字):
當類對象的數組進行初始化(顯式或隱式地)和元素初始化 通過構造函數,應該按照下標順序爲數組的每個元素調用構造函數; 見8.3.4。 [注意:數組元素的析構函數按其構造的相反順序調用。 - 結束 備註]