回答
从[basic.stc.dynamic]:
不限分配和/或在C++程序定义释放函数,包括在 库的默认的版本中,应confrm在3.7中指定的语义。 4.1和3.7.4.2。
从[basic.stc.dynamic.deallocation]:
供给到释放函数的第一个参数的值可以是一个空指针值;如果是这样,并且如果释放函数是标准库中提供的函数,则该调用不起作用。
如果给出在标准库中的释放函数的参数是一个指向不属于空 指针值(4.11),则解除分配功能必须解除分配指针所引用的存储,结束 的区域的持续时间的存储。
如果提供空指针值,则需要释放函数不起作用。这基本上与要求释放函数忽略空pionter值相同。
从[expr.delete],
如果的操作数的值删除表达式为空 指针值,它是未指定是否如上所述的解除分配函数将被称为。
所以它听起来像你的用户定义或类特定的删除操作符来处理nullptr
。
在[class.free]的其他地方,当描述类的解除分配函数时,带有虚拟析构函数的类可以根据动态类型调用解除分配函数。在这种情况下,解除分配函数不需要检查nullptr。
@Barry在我的几秒钟之内得到了他的答案,但我们看了标准的不同部分。 – 1201ProgramAlarm
你的答案是关于删除表达式,而不是删除操作符。 (请参阅评论中的讨论。) – AlexD
@AlexD同样的事情。 'delete ptr;'是一个* delete-expression *,它将调用一个释放函数。 – Barry
- 1. C++中的删除操作符是否需要正确的类型?
- 2. nullptr是否在C++中引用未定义的行为?
- 3. 是否需要将特定于类的新删除操作符声明为静态
- 4. 非RAII类是否需要用户定义的析构函数?
- 5. 删除用户定义的向量 - C++
- 6. 全局新和删除操作符的定义
- 7. 需要使用XSLT删除特定事件的符号
- 8. 在Angular.js需要删除一个特定的字符串
- 9. Spark - 操作数据框中的特定列值(删除字符)
- 10. 需要被定义为使用std的“==”操作符::找到
- 11. 在python类中定义常量是否真的需要?
- 12. 在C++中定义需要用C#和C++实现的接口
- 13. 操作使用用户定义的物理类型VHDL
- 14. 的MySQL需要帮助定义SQL删除不需要的行
- 15. 使用自定义删除程序返回uniqueptr的nullptr失败
- 16. 在C#中需要特定的日期#
- 17. 我是否需要用symfony2/fosuserbundle和sonata admin来删除我的自定义用户实体
- 18. 是否可以删除特定用户的所有提交?
- 19. window.onpopstate - 我是否需要删除此事件处理程序?
- 20. 定义自定义操作字符串时是否需要包含应用程序包前缀
- 21. 如何在批处理文件中删除用户定义的行
- 22. 在C++中重载删除操作符
- 23. 删除特定类
- 24. 如何处理特定种类的收集操作?
- 25. 操作码和操作数是如何定义在CPU中的?
- 26. 如何禁用UITableView中特定行的删除操作?
- 27. C++删除操作符
- 28. 在hg repo中处理操作系统特定的.classpath文件
- 29. 如何在oracle中获取用户定义的操作符
- 30. 查找在sqlalchemy用户定义类型中发生的操作
必须检查标准,但需要通过良好的编程:当然。 –
以及在哪里检查。它是否允许在本书的某个地方显式使用? –
为什么downvoting?好的问题实际上。 – SergeyA