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

问题描述

作为程序员,我想知道从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 (将#修改为@)