可能性の重複:
Deleting a pointer to const (T const*)なぜ "const T *"が "operator delete"のtrivially "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ではないはずです。さもなければ、すべての 'delete'sはUBです。もちろん、 – iammilind