【发布时间】:2011-11-15 14:30:30
【问题描述】:
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,嗯,
const T*应该先转换为T*,然后再转换为void*。所以它不应该是UB。否则所有deletes 都是UB。 -
哎呀,当然。我没有仔细阅读代码。
标签: c++ pointers constants free delete-operator