【问题标题】:What is nothrow delete in C++?C++ 中的 nothrow delete 是什么?
【发布时间】:2010-12-29 23:09:42
【问题描述】:

This MSDN page 提到没有newdelete 的版本。 nothrow new 是众所周知的事情 - 如果内存分配失败,则返回 null 而不是抛出异常。但是那里提到的nothrow delete 是什么?

【问题讨论】:

    标签: c++ visual-c++ memory-management


    【解决方案1】:

    他们可能指的是原始内存分配函数operator newoperator delete

    当您调用特定版本的placement new-expression(即带有额外参数的new-expression;它们都被正式称为newplacement形式)和内存分配函数@ 987654324@ 成功,但进程稍后由于某些其他原因失败(构造函数抛出),实现必须中止进程并通过调用适当版本的operator delete 自动释放分配的内存。在这种情况下,operator delete 的“适当版本”是与之前用于内存分配的operator new 函数具有相同参数集的版本(当然,第一个参数除外)。

    这也适用于operator newnothrow 版本。当您使用nothrow 形式的new-expression 时,它会调用operator newnothrow 版本,然后在分配的内存中构造对象。如果构造函数失败(抛出),new-expression 的实现在nothrow 版本的operator delete 的帮助下释放分配的内存。这基本上是这个版本的operator delete 存在的唯一原因。

    换句话说,operator deletenothrow 版本存在于非常特定的内部目的。您通常不应该自己调用它,也许您真的不需要知道它的存在。然而,值得知道的是,由于上述原因,每当您创建自己的带有额外参数的operator new 版本时,提供具有相同额外参数集的operator delete 的匹配版本总是一个好主意。

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多