c# - 对象实例化异常。初始化成员会发生什么?

标签 c# .net object garbage-collection

根据 this文章中,字段在构造函数执行之前被初始化。但是,如果在构造函数中抛出异常怎么办?对象实例化将失败。

但是初始化字段会发生什么?它们仍然保留在内存中还是立即被垃圾收集?如果在构造函数中的异常发生之前声明并初始化了非托管资源怎么办。这种不受管理的资源会继续存在吗?

最佳答案

如果在构造函数中抛出异常,则该类型的集合与未抛出异常时没有什么不同。当 GC 运行时,如果无法从有根项目访问该对象,它将被清理。如果由于初始化失败而没有对该对象的引用,它将在下一次收集时被清除。

非托管资源不会自行清理。这实际上是非托管资源的定义。非托管资源是指未自行清理的任何资源;托管资源是自行清理的资源。在处理非托管资源时,您需要支持类型初始化失败的情况并适当清理资源,如果不这样做,那么您已经泄漏了它们,并且需要处理由此产生的任何后果。

关于c# - 对象实例化异常。初始化成员会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244973/

相关文章:

c# - PageMethod 无法调用 C# 函数

c# - 使接口(interface)实现异步

c# - 向 WPF 应用程序添加资源会导致生成错误

c# - 我在C# “The type or namespace name does not exist in namespace”中收到错误

.net - 如何使依赖属性更改的视觉无效?

c# - LINQ 命名标准 - Lambda 表达式

.net - 冗余命名空间会产生任何开销吗

javascript - 我如何通过他们的 parentId 和 Id 在 Javascript 中从这个平面数组构建一个树数组。

MYSQL PDO 多数据库调用

java - 从字节数组创建对象(使用构造函数)