相关疑难解决方法(0)

删除null void*指针是不确定的行为?

我知道delete空指针是一个无操作:

在任一替代方案中,如果delete的操作数的值是空指针,则操作无效.
(C++标准5.3.5 [expr.delete] p2)

并且删除void*指针是未定义的行为,因为无法调用析构函数,因为没有类型的对象void:

在第一个alternative(delete object)中,delete的操作数的值应该是指向非数组对象的指针或指向表示这种对象的基类的子对象的指针.如果不是,则行为未定义.
(C++标准5.3.5 [expr.delete] p2)

现在,通常我认为列出的东西首先列出了后面列出的东西,但是空void*指针如下呢?

void* p = 0;
delete p; // UB or well-defined?
Run Code Online (Sandbox Code Playgroud)

c++ void-pointers null-pointer undefined-behavior language-lawyer

28
推荐指数
2
解决办法
3243
查看次数