考慮以下程式碼片段:
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete[] ptr; }
刪除指派為空白指標的指標是否安全void* 使用刪除[]運算子?
答案:
C 標準明確未定義透過 void* 刪除指標。第5.3.5/3 節規定:
在第一種選擇(刪除物件)中,如果操作數的靜態型別與其動態型別不同,則靜態型別應為操作數動態型別的基底類別且靜態類型應具有虛擬析構函數,否則行為未定義。在第二種選擇(刪除陣列)中,如果要刪除的物件的動態類型與其靜態類型不同,則行為未定義。
此外,腳註指出:
這意味著不能使用void* 類型的指針刪除對象,因為不存在類型的對象void.
結論:
使用delete[]運算子刪除指派為void*的指標是不安全的。在刪除之前始終將指標轉換為其原始類型。
以上是在 C 中使用'delete[]”刪除'void*”指標安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!