有問題的代碼:
void deleteForMe(int* pointer) { delete[] pointer; }
如果指針未指向,則具有未定義的行為一個數組,因為它盲目地執行了delete[]操作。但是,當指標引用數組時,如:
int main() { int* arr = new int[5]; deleteForMe(arr); return 0; }
作業系統以某種方式知道只刪除指定的陣列元素,而不繼續超出它們。
此行為的關鍵在於C 作為 C 相容語言的歷史根源。為了避免為不使用陣列的程式設計師帶來不必要的開銷,引入了delete[]語法。
進行非陣列分配時,如:
Foo* foo = new Foo;
沒有額外的陣列支援會產生開銷。然而,對於數組分配,這種開銷確實存在。為了指示運行時庫應該使用此信息,程式設計師必須為數組指標指定delete[]。
因此,delete 和delete[] 之間的選擇是基於要刪除的特定分配。這允許更細粒度的記憶體管理,並符合 C 的極簡主義哲學。
以上是`delete[]` 如何知道要從陣列中刪除多少個元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!