c++是否需要在用户定义和类特定的删除运算符中处理nullptr

c++ is it required to handle nullptr in user-defined and class-specific delete operators.?

本文关键字:删除 运算符 nullptr 处理 是否 用户 定义 c++      更新时间:2023-10-16

用户定义和类特定的删除运算符是否需要像标准库中的运算符那样忽略nullptr


谷歌小组的平行讨论。

来自[expr.delete],

如果删除表达式的操作数的值为null指针值,则未指定是否会如上所述调用解除分配函数。

因此,处理nullptr听起来像是用户定义的或类特定的删除运算符。

在[class.free]的其他地方,当描述类的释放函数时,具有虚拟析构函数的类可以具有基于动态类型调用的释放函数。在这种情况下,解除分配函数将不需要检查nullptr。

来自[basic.stc.dynamic]:

C++程序中定义的任何分配和/或解除分配函数,包括库,应符合3.7.4.1和3.7.4.2中规定的语义。

来自〔basic.stc.dynamic.deallocation〕:

提供给解除分配函数的第一个参数的值可能是空指针值;如果是这样,并且deallocation函数是标准库中提供的函数,则该调用没有任何作用。

如果给定给标准库中的释放函数的参数是一个非null的指针指针值(4.11),解除分配函数应解除分配指针引用的存储,结束存储区域的持续时间。

如果提供空指针值,则要求解除分配函数无效。这基本上与要求deallocation函数忽略null指针值是一样的。