3
  • 在 c# 中使用 operator new 是否可能会失败(例如,如果它需要大内存)?-解决了-
  • 以及如何发现它?-解决了-
  • 新操作员可能会抛出哪些其他故障?

谢谢

4

4 回答 4

9

如果new失败,它将抛出OutOfMemoryException。此外,构造函数本身可能会根据实现抛出任何异常。

来自 OutOfMemoryException 的 MSDN 文档:

以下 Microsoft 中间 (MSIL) 指令抛出 OutOfMemoryException :

  • 盒子

  • 纽华尔

  • 新对象

于 2010-04-22T21:07:28.717 回答
4

调用构造函数的new运算符可以抛出您可以想象的任何异常。例如,如果构造函数内部尝试分配一些大的东西但失败了,那么该异常可能会被捕获并重新引发为更奇特的东西。

当然,当您开始看到内存不足时,您可能应该认为该进程已病入膏肓,并尽快将其从痛苦中解脱出来。

尽管有所有相反的谣言,构造函数也可以返回null甚至为类 - 但这是一个极端的极端情况,接近于病态。

于 2010-04-22T21:16:34.187 回答
1

在 c# 中使用 operator new 是否可能会失败(如果它需要大内存)?

是的。(您可能用完的资源是地址空间,而不是内存本身。)

以及如何发现它?

我不明白这个问题。

于 2010-04-22T21:07:11.683 回答
1

是的,它抛出OutOfMemoryException

于 2010-04-22T21:08:07.860 回答