c ++是否需要在用户定义的和特定于类的删除操作符中处理nullptr.

Gre*_*ree 16 c++ nullptr language-lawyer delete-operator

用户定义和类特定的删除操作符是否需要忽略nullptr,因为标准库中的操作符会这样做?


谷歌小组的平行讨论.

120*_*arm 6

来自[expr.delete],

如果delete-expression的操作数的值是空指针值,则不指定是否将如上所述调用释放函数.

所以听起来像你的用户定义或类特定的删除操作符来处理nullptr.

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


Bar*_*rry 5

来自[basic.stc.dynamic]:

C++程序中定义的任何分配和/或释放函数,包括库中的缺省版本,都应该与3.7.4.1和3.7.4.2中指定的语义相对应.

来自[basic.stc.dynamic.deallocation]:

提供给解除分配函数的第一个参数的值可以是空指针值 ; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.

如果给标准库中的释放函数赋予的参数是一个不是空指针值的指针(4.11),则释放函数将释放指针引用的存储,从而结束存储区域的持续时间.

如果提供空指针值,则需要释放函数无效.这基本上与要求释放函数忽略null pionter值是一回事.

  • 但是为什么"_并且如果解除分配函数是标准库中提供的函数"那么呢? (4认同)