2009-12-25 84 views

回答

18

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

当你调用放置新的表达的特定版本(带额外的参数,即新的表达;他们都被官方称为放置形式的new)和内存分配函数operator new成功,但过程失败后来出于其他原因(构造函数抛出),实现必须中止该过程并通过调用operator delete的适当版本自动释放分配的内存。在这种情况下,operator delete的“适当版本”是与以前用于内存分配的operator new函数(当然除了第一个参数除外)具有相同参数集的版本。

这也适用于nothrow版本的operator new。当您使用新表达式的nothrow形式时,它会调用nothrow版本的operator new,然后在分配的内存中构造该对象。如果构造函数失败(抛出),则使用nothrow版本的operator delete版本来实现新表达式版本分配内存。这基本上是这个版本operator delete存在的唯一原因。

换句话说,的nothrow版本存在非常具体的内部目的。你通常不应该自己打电话给它,也许你并不需要知道它的存在。但是,值得了解的是,由于上述原因,无论何时使用额外参数创建您自己的operator new版本,最好提供operator delete的匹配版本以及相同的一组额外参数。

相关问题