微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不能在析构函数中释放托管的东西?

如何解决为什么不能在析构函数中释放托管的东西?

作为程序员,我想知道从GC开始(虽然我们不知道它什么时候开始工作,但根据MSDN,它会释放任何活动线程都没有引用的资源......等等)。既然这些资源都是USELESS,为什么不把释放托管资源的代码放在析构函数中呢?类似于以下内容

public class A
{
           private bool _isdisposed = false;
        
            public void dispose()
            {
              if(!_isdisposed){
                  // Release unmanaged and managed things
                   ……
                  // Set to false to mark this class has been totally freed...
                  _isdisposed = true;
              }
           }
            ~A()
            {
               dispose();
            }
}

为什么我们只在析构函数中放置非托管的东西而不是所有的东西?

以此为例:

A a = new A();
a = null;

告诉你实例“a”不会被任何活动线程引用(否则它不能被GC收集),但非常简单。那为什么不让析构函数释放里面的所有资源???

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。