This MSDN page提到new
和delete
沒有長版本。 nothrow new
是一件相當有名的事情 - 如果內存分配失敗,返回null而不是拋出異常。但那裏提到nothrow delete
是什麼?什麼是C++中的非法刪除?
10
A
回答
18
它們可能指的是原始內存分配函數operator new
和operator 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
的匹配版本以及相同的一組額外參數。
相關問題
- 1. 什麼是「=刪除」?
- 2. 刪除部分字符串的最佳方法是什麼? (C#)
- 3. 什麼是表的刪除MSSQL中
- 4. C#string.replace刪除非法字符
- 5. 在字符串C刪除非法Charactors
- 6. 在EF c#中刪除表,我的表名是什麼
- 7. 目標C中什麼是非空?
- 8. 在arcpy中刪除或刪除表的代碼是什麼?
- 9. 什麼是從世界中刪除身體的正確方法?
- 10. 從NSString中刪除路徑的最佳方法是什麼?
- 11. 什麼是從IE中刪除DOM元素的最快方法?
- 12. 什麼是刪除數組中指針的正確方法?
- 13. 從DataTable中添加/刪除DataRow的正確方法是什麼
- 14. 從列表中刪除boost :: shared_ptr的正確方法是什麼?
- 15. 在Perforce中刪除文件的命令行語法是什麼?
- 16. 從XML中刪除值的最簡單方法是什麼
- 17. 在golang中,刪除停用詞的最快方法是什麼?
- 18. 在ClearCase中刪除基線的語法是什麼?
- 19. 從ObservableCollection中刪除KeyValue最有效的方法是什麼?
- 20. 從集合中刪除項目的建議方法是什麼?
- 21. 在PLINQO中刪除M:M的正確方法是什麼?
- 22. 在JavaScript中刪除對象的最佳方法是什麼?
- 23. 從ArgumentListSyntax中刪除OpenParen SyntaxToken的簡單方法是什麼?
- 24. 警告C4247和C4248是什麼意思,爲什麼從Visual C++ 2005中刪除?
- 25. C++ 11:從矢量中刪除多個事件。最佳做法是什麼?
- 26. 什麼是C#的語法@
- 27. Nullify刪除規則是幹什麼的?
- 28. 什麼是有界泛型的刪除?
- 29. 什麼是「?」的類型刪除?
- 30. 什麼是刪除的JDO順序