Gre*_*ree 16 c++ nullptr language-lawyer delete-operator
用户定义和类特定的删除操作符是否需要忽略nullptr,因为标准库中的操作符会这样做?
谷歌小组的平行讨论.
来自[expr.delete],
如果delete-expression的操作数的值是空指针值,则不指定是否将如上所述调用释放函数.
所以听起来像你的用户定义或类特定的删除操作符来处理nullptr.
在[class.free]中的其他地方,当描述类的释放函数时,具有虚拟析构函数的类可以具有基于动态类型调用的释放函数.在这种情况下,释放函数不需要检查nullptr.
来自[basic.stc.dynamic]:
C++程序中定义的任何分配和/或释放函数,包括库中的缺省版本,都应该与3.7.4.1和3.7.4.2中指定的语义相对应.
来自[basic.stc.dynamic.deallocation]:
提供给解除分配函数的第一个参数的值可以是空指针值 ; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.
如果给标准库中的释放函数赋予的参数是一个不是空指针值的指针(4.11),则释放函数将释放指针引用的存储,从而结束存储区域的持续时间.
如果提供空指针值,则需要释放函数无效.这基本上与要求释放函数忽略null pionter值是一回事.
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |