This MSDN page提到没有new
和delete
的版本。 nothrow new
是一个众所周知的事情 - 如果内存分配失败,则返回null而不是抛出异常。但那里提到的nothrow delete
是什么?
答案 0 :(得分:18)
它们可能指的是原始内存分配函数operator new
和operator delete
。
当您调用特定版本的placement new-expression(即带有额外参数的new-expression;它们都被正式称为 placement 形式的new
)和内存分配时函数operator new
成功,但由于某些其他原因导致进程失败(构造函数抛出),实现必须中止进程并通过调用operator delete
的相应版本自动释放已分配的内存。在这种情况下,operator delete
的“适当版本”是与先前用于内存分配的operator new
函数具有相同参数集的版本(当然,除了第一个参数外)。
这也适用于nothrow
operator new
版本的nothrow
。当您使用nothrow
形式的new-expression时,它会调用operator new
版本的nothrow
,然后在分配的内存中构造对象。如果构造函数失败(抛出),则new-expression的实现会在operator delete
版operator delete
的帮助下释放已分配的内存。这基本上是此nothrow
版本存在的唯一原因。
换句话说,operator delete
operator new
版本的operator delete
用于非常具体的内部目的。你通常不应该自己打电话,也许,你真的不需要知道它的存在。但是,值得一提的是,出于上述原因,每当您使用额外参数创建自己的{{1}}版本时,提供具有相同集合的{{1}}的匹配版本始终是个好主意。额外的参数。