This MSDN page提到没有 new
和 delete
的抛出版本。 nothrow new
是众所周知的事情 - 如果内存分配失败,则返回 null 而不是抛出异常。但是那里提到的nothrow delete
是什么?
最佳答案
他们可能指的是原始内存分配函数 operator new
和 operator delete
。
当您调用特定版本的放置新表达式(即带有额外参数的新表达式;它们都正式称为 new
的放置形式)和内存分配函数 operator new
成功,但由于某些其他原因(构造函数抛出)稍后进程失败,实现必须中止进程并通过调用适当版本的 运算符删除
。在这种情况下,operator delete
的“适当版本”是与之前用于内存分配的 operator new
函数具有相同参数集的版本(除了第一个当然是参数)。
这也适用于 operator new
的 nothrow
版本。当您使用 nothrow
形式的 new 表达式时,它会调用 operator new
的 nothrow
版本,然后在分配的内存中构造对象。如果构造函数失败(抛出),new 表达式的实现将在 nothrow
版本的 operator delete
的帮助下释放分配的内存。这基本上是此版本 operator delete
存在的唯一原因。
换句话说,operator delete
的nothrow
版本的存在是为了非常具体的内部目的。你通常不应该自己调用它,也许你真的不需要知道它的存在。然而,值得注意的是,由于上述原因,每当您创建自己的带有额外参数的 operator new
版本时,最好提供一个匹配版本的 operator delete
具有相同的一组额外参数。
关于c++ - C++ 中的 nothrow delete 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960740/