2009-12-25 36 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的匹配版本以及相同的一組額外參數。

相關問題