Any*_*orn 4 c++ casting delete-operator
假设代码执行以下操作:
T *pointer = new T();
delete static_cast<void*>(pointer);
Run Code Online (Sandbox Code Playgroud)
结果是什么?未定义,内存泄漏,内存被删除?
行为未定义.关于删除表达式,C++标准说:
在第一个替代(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数的动态类型的基类,静态类型应具有虚拟析构函数或行为未定义.在第二个备选(删除数组)中,如果要删除的对象的动态类型与其静态类型不同,则行为未定义.(§5.3.5/ 3)
然后,本段的脚注明确指出:
这意味着无法使用类型的指针删除
void*对象,因为没有类型的对象void(注释73).