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删除非法Charactors
- 5. 在arcpy中删除或删除表的代码是什么?
- 6. 在EF c#中删除表,我的表名是什么
- 7. 从列表中删除boost :: shared_ptr的正确方法是什么?
- 8. 在Perforce中删除文件的命令行语法是什么?
- 9. 从ObservableCollection中删除KeyValue最有效的方法是什么?
- 10. 什么是从IE中删除DOM元素的最快方法?
- 11. 从ArgumentListSyntax中删除OpenParen SyntaxToken的简单方法是什么?
- 12. 什么是删除数组中指针的正确方法?
- 13. 从DataTable中添加/删除DataRow的正确方法是什么
- 14. 从NSString中删除路径的最佳方法是什么?
- 15. 从XML中删除值的最简单方法是什么
- 16. 在golang中,删除停用词的最快方法是什么?
- 17. 在PLINQO中删除M:M的正确方法是什么?
- 18. 在ClearCase中删除基线的语法是什么?
- 19. C++ 11:从矢量中删除多个事件。最佳做法是什么?
- 20. 什么是“?”的类型删除?
- 21. Nullify删除规则是干什么的?
- 22. 什么是有界泛型的删除?
- 23. 什么是从巨大表中删除“非唯一”值的“最佳实践”?
- 24. 级联删除性能:什么是删除一行多行最快的方法?
- 25. 继承 - 为什么这是非法的?
- 26. jquery:为什么$(“#id_pop”)[0]是非法的?
- 27. C++删除什么wchar_t *指向
- 28. 什么是删除UIScrollView的所有子视图的好方法?
- 29. 从XML中删除非法字符
- 30. C#中的等效语法是什么?