可能重複:
Deleting a pointer to const (T const*)爲什麼在「操作符刪除」中將「const T *」簡單地轉換爲「void *」?
void operator delete (void*);
...
const char *pn = new char, *pm = (char*)malloc(1);
delete pn; // allowed !!
free(pm); // error
Demo。
這是可以理解的free()
是一個函數,所以一個const void*
不能轉換爲void*
。但爲什麼在operator delete
(默認或超載)的情況下允許?
它在功能上不是一個錯誤的構造嗎?
無論如何,刪除一個'void *'是UB,所以誰在乎? – tenfour
它的答案在這裏:http://stackoverflow.com/questions/755196/deleting-a-pointer-to-const-t-const –
@tenfour,以及'const T *'應先轉換爲'T *',然後它被轉換爲void *'。所以它不應該是UB。否則,所有'刪除'都是UB。 – iammilind