C++中的nothrow delete是什么?

10

这个MSDN页面提到了newdelete的nothrow版本。 nothrow new是一个相当常见的东西——如果内存分配失败,则返回null而不是抛出异常。 但是,那里提到的nothrow delete是什么呢?

1个回答

20
他们可能指的是原始内存分配函数operator newoperator delete
当调用特定版本的放置new-expression(即带有额外参数的new-expression;它们都被正式称为放置形式的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接