c++是否需要在用户定义和类特定的删除运算符中处理nullptr
c++ is it required to handle nullptr in user-defined and class-specific delete operators.?
用户定义和类特定的删除运算符是否需要像标准库中的运算符那样忽略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指针值是一样的。
相关文章:
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 无效删除运算符语法
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- C++自定义删除运算符不能正常工作?
- 为什么我们甚至需要删除运算符?(我们不能只使用删除[]吗)
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 在这里使用删除运算符是否正确,我很困惑
- 删除运算符
- 使用空实现重写删除运算符
- C ++(为什么)确实移动构造函数删除运算符=
- 如何在 C++ 中使用删除运算符删除单个数据
- 如何通过带有指向基类的指针的删除运算符释放内存
- 删除运算符如何在我的代码中工作
- C++ - 定义自定义新建和删除运算符时make_shared
- 将删除运算符放置在何处以进行动态变量
- C++删除运算符而不"new"
- 如何使用删除 [] 运算符清除动态分配的内存?(无法使用常规删除语法清除)
- 为什么删除运算符在const上下文中使用
- c++是否需要在用户定义和类特定的删除运算符中处理nullptr
- C++ 在覆盖新运算符和删除运算符时不释放数据