假设代码执行以下操作:
T *pointer = new T();
delete static_cast<void*>(pointer);
什么是结果?未定义、内存泄漏、内存被删除?
该行为是未定义的。关于删除表达式,C++ 标准规定:
在第一种选择中(删除对象),如果操作数的静态类型与其动态类型不同,则静态类型应是操作数动态类型的基类,并且静态类型应具有虚拟析构函数,否则行为未定义。在第二种选择中(删除数组) 如果要删除的对象的动态类型与其静态类型不同,则行为未定义。 (§5.3.5/3)
那么本段的脚注明确指出:
这意味着不能使用类型的指针删除对象void*
因为没有类型的对象void
(注73)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)