msc*_*msc 2 c++ nullptr language-lawyer delete-operator c++17
C++ 03标准说:
5.3.5删除
[...]在任一替代方案中,如果delete的操作数的值是空指针,则操作无效.[...]
char *p = nullptr;
delete p; //no effect
Run Code Online (Sandbox Code Playgroud)
这意味着,在c ++中删除空指针是有效的.
关于在nullptr指针上调用delete的C++ 17标准是什么意思?
对于析构函数,[expr.delete]/6:
如果delete-expression的操作数的值不是空指针值,则delete-expression将调用该对象的析构函数(如果有)或要删除的数组的元素.
从技术上讲,如果操作数是空指针值,则不会调用析构函数.可能是一个轻微的措辞问题?
对于释放,[expr.delete]/7:
如果delete-expression的操作数的值是空指针值,则不指定是否将如上所述调用释放函数.
未指定的释放,但可能没有破坏.
另请注意,来自[basic.stc.dynamic.deallocation]/3,它澄清了即使在这种情况下调用标准库释放函数,也没有效果:
提供给解除分配函数的第一个参数的值可以是空指针值; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.
归档时间: |
|
查看次数: |
1414 次 |
最近记录: |