这个MSDN页面提到了new
和delete
的nothrow版本。 nothrow new
是一个相当常见的东西——如果内存分配失败,则返回null而不是抛出异常。 但是,那里提到的nothrow delete
是什么呢?
这个MSDN页面提到了new
和delete
的nothrow版本。 nothrow new
是一个相当常见的东西——如果内存分配失败,则返回null而不是抛出异常。 但是,那里提到的nothrow delete
是什么呢?
operator new
和operator delete
。new
)并且内存分配函数operator new
成功,但后来由于某种其他原因而失败时(构造函数抛出异常),实现必须通过调用适当版本的operator delete
自动释放已分配的内存。在这种情况下,“适当版本”的operator delete
是先前用于内存分配的operator new
函数具有相同参数集的版本(当然除了第一个参数之外)。nothrow
版本的operator new
。当使用nothrow
的new-expression时,它会调用nothrow
版本的operator new
,然后在分配的内存中构造对象。如果构造函数失败(抛出异常),则new-expression的实现将使用nothrow
版本的operator delete
释放已分配的内存。这基本上是此版本operator delete
存在的唯一原因。nothrow
版本的operator delete
存在于非常特定的内部目的。您通常不应该想要自己调用它,并且也许您真的不需要知道其存在。但是,值得知道的是,出于上述原因,无论何时创建具有额外参数的自己版本的operator new
,都最好提供具有相同额外参数集的匹配版本的operator delete
。