当我从如下构造函数中抛出异常时是否存在内存泄漏?
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 block ,每次您尝试创建该类都会泄漏内存。例如,这会泄漏内存。
using ( var f = new Foo() ) {
// Won't execute and Foo.Dispose is not called
}
关于.net - 从 .NET 中的构造函数中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926362/