根据 this文章中,字段在构造函数执行之前被初始化。但是,如果在构造函数中抛出异常怎么办?对象实例化将失败。
但是初始化字段会发生什么?它们仍然保留在内存中还是立即被垃圾收集?如果在构造函数中的异常发生之前声明并初始化了非托管资源怎么办。这种不受管理的资源会继续存在吗?
最佳答案
如果在构造函数中抛出异常,则该类型的集合与未抛出异常时没有什么不同。当 GC 运行时,如果无法从有根项目访问该对象,它将被清理。如果由于初始化失败而没有对该对象的引用,它将在下一次收集时被清除。
非托管资源不会自行清理。这实际上是非托管资源的定义。非托管资源是指未自行清理的任何资源;托管资源是自行清理的资源。在处理非托管资源时,您需要支持类型初始化失败的情况并适当清理资源,如果不这样做,那么您已经泄漏了它们,并且需要处理由此产生的任何后果。
关于c# - 对象实例化异常。初始化成员会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244973/