首頁 >後端開發 >C++ >`delete[]` 如何知道要從陣列中刪除多少個元素?

`delete[]` 如何知道要從陣列中刪除多少個元素?

Susan Sarandon
Susan Sarandon原創
2024-11-27 19:46:11694瀏覽

How Does `delete[]` Know How Many Elements to Delete from an Array?

delete[] 如何破解數組

有問題的代碼:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn