我无法理解为void * == nullptr。
调用operator delete需要做什么标准这样的事情:
void foo(void* ptr) // ptr == nullptr here
{
delete ptr;
}
一方面,我们在标准中有以下声明:
ISO / IEC 14882:2011
5.3.5删除[expr.delete]
1 ...操作数应具有指向对象类型或类类型的指针 对指针有一个非显式转换函数(12.3.2) 对象类型。结果的类型为void.78
78)这意味着无法使用指针删除对象 输入void *因为void不是对象类型。
使代码删除void *格式错误。另一方面,我们在delete中有另一个关于nullptr的陈述:
ISO / IEC 14882:2011
5.3.5删除[expr.delete]
2 ...在第一个替代(删除对象)中,的值 delete的操作数可以是空指针值,指向a的指针 由前一个new-expression创建的非数组对象,或指向的指针 表示这种对象的基类的子对象(1.8)(子句 10)。如果不是,则行为未定义。在第二种选择 (删除数组),删除操作数的值可以为null 指针值或由前一个数组产生的指针值 new-expression.79如果不是,则行为未定义。
在这种情况下需要做哪些实施?
答案 0 :(得分:3)
Null和void*
是两回事:
delete static_cast<int*>(nullptr); // deleting null pointer, of int*
您给定的代码格式不正确,但它与指针的值无关(可能为null),但其类型(其中)不能是void*
)。