Dot-Net
從 .NET 中的建構子中拋出異常
當我從如下建構子中拋出異常時,是否存在記憶體洩漏?
class Victim { public string var1 = "asldslkjdlsakjdlksajdlksadlksajdlj"; public Victim() { //throw new Exception("oops!"); } }垃圾收集器會收集失敗的對象嗎?
一般來說,從不洩漏記憶體的角度來看,這是安全的。但是,如果您在類型中分配非託管資源,則從建構子中拋出異常是危險的。舉個例子
public class Foo : IDisposable { private IntPtr m_ptr; public Foo() { m_ptr = Marshal.AllocHGlobal(42); throw new Exception(); } // Most of Idisposable implementation ommitted for brevity public void Dispose() { Marshal.FreeHGlobal(m_ptr); } }即使您使用 using 塊,每次嘗試創建此類都會洩漏記憶體。例如,這會洩漏記憶體。
using ( var f = new Foo() ) { // Won't execute and Foo.Dispose is not called }