none
析构函数什么时候会调用? RRS feed

  • 问题

  • 我希望c#程序在退出后自动向数据库更新状态,所以定义了

    Class A{
    
          A(){
              //一些数据库初始化工作
             }
         ~A(){ 
              //一些更新数据库工作
             }
    }

    然后在CLI程序一运行的时候就new A了

    但是我发现程序的窗口关闭后并没有调用析构

    是我用错了?还是有其他方法控制程序退出时的调用?谢谢


    2012年11月22日 3:34

答案

  • dear

    我是可以调用的,无法模拟你的问题,为了防止有人未依正常程序结束物件的生命周其,才有析构的出现

    你可在 ~A() 设定中断点观察 

    析构是为了释放非托管资源用的,并非让你用来更新数据。

    http://msdn.microsoft.com/zh-cn/library/66x5fx1b(VS.80).aspx

    程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。



    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    • 已标记为答案 Alex D'oh 2012年11月22日 5:52
    2012年11月22日 5:29