析构函数

转载 2012年03月31日 13:19:54
析构函数

  析构函数是在类的破坏时自动执行的操作,析构函数在碎片收集时会自动调用,程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的

  垃圾回收器

  与运行时不进行垃圾回收的开发语言相比,C#无需太多的内存管理,这是因为.NETFramework垃圾回收器会隐式的管理对象的分配和释放,垃圾回收器检查是否存在应用程序不在使用的对象,如果垃圾回收器认为某个对象符合析构,则调用析构函数,并回收此对象占用的内存,应用程序退出时也会调用析构函数

  为什么使用析构函数?

  一般情况下,C#应用程序中很少使用析构函数,但是当应用程序封装窗口,文件和网络连接这些非托管资源时,应该使用析构函数释放这些资源,因为垃圾回收器不是所有的资源都能释放的

  创建析构函数需要注意以下几点

  1:析构函数只能定义在类中,不能定义在结构中

  2:一个类只能有一个析构函数

  3:无法重载析构函数

  4:无法调用析构函数,它们被自动调用

  5:析构函数没有修饰符,也没有参数

  6:析构函数与类同名

  举例

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;

  namespace _14_Destructor
  {
      class Program
      {
          static void Main(string[] args)
          {
          }
      }

      class Student
      { 
          ~Student()
          {
            
          }
      }
  }

析构函数声明为私有的作用

当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。class alloc{public:    alloc():private:   ~alloc();}; 如果在栈上分配空间,类在离开...
  • jia_xiaoxin
  • jia_xiaoxin
  • 2008年11月21日 23:09
  • 7340

C++类有继承时,析构函数必须为虚函数

虚函数与多态一文中讲了虚函数的用法和要点,但少讲了一点,就是虚函数在析构中的用法,本文就是修复一bug的。C++类有继承时,析构函数必须为虚函数。如果不是虚函数,则使用时可能存在内在泄漏的问题。假设我...
  • luoweifu
  • luoweifu
  • 2016年12月21日 09:24
  • 2465

C++ 默认析构函数

1. 与构造函数一样,假如我们不指定自己的析构函数,那么编译器将为我们创建一个默认析构函数。        析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要用户调用,而是在...
  • helainthus
  • helainthus
  • 2016年05月16日 13:59
  • 3088

C++何时需要自定义析构函数呢?

对象销毁时  如果我们自己没有写析构方法,编译器会帮我们写一个然后调用。 那么问题来了,既然我不写,编译器会帮我写,那我干嘛要写??? 有木有什么情况必须我自己写的???? 处理内存的时...
  • love9099
  • love9099
  • 2015年01月24日 17:51
  • 1206

C++中基类的析构函数为什么要用virtual虚析构函数

C++中基类的析构函数为什么要用virtual虚析构函数, 弄清楚为什么。
  • IIcyZhao
  • IIcyZhao
  • 2013年09月22日 18:41
  • 4901

将析构函数声明为private的作用

用声明创建一个栈对象时,会发生如下操作 1、会移动栈顶指针以“挪出”适当大小的空间 2、在这个空间上直接调用对应的构造函数以形成一个栈对象 3、当函数返回时,会调用其析构函数释放这个对象 4、调整栈顶...
  • HITXuQin
  • HITXuQin
  • 2013年10月18日 11:33
  • 1784

为MFC应用程序添加析构函数

  MFC编写的智能设备应用程序,有些自己创建的GDI资源需要释放,以免造成内存泄露。这样有些代码想放到主对话框的析构函数中。这时会发现找不到主对话框的析构函数,只能看到构造函数。  这就需要自己来为...
  • joyzml
  • joyzml
  • 2010年01月29日 14:05
  • 6732

关于析构函数和纯虚函数

之前一直不知道,虚析构函数yo
  • guozhengdong
  • guozhengdong
  • 2014年09月29日 22:18
  • 1012

立此存照26[C++]为什么VS2013不能显示析构函数中的输出语句

#include using namespace std; class A { public: A() { cout
  • u011559205
  • u011559205
  • 2015年01月07日 17:29
  • 1392

避免在析构函数中编写代码

上篇文章中,我们介绍了为什么应该彻底避免编写拷贝构造函数和赋值操作符。今天这篇我们讨论下为什么应该避免在析构函数中编写代码。即让析构函数为空。 例如: virtual ~MyClass() { } 我...
  • kerry0071
  • kerry0071
  • 2014年07月21日 11:55
  • 1523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:析构函数
举报原因:
原因补充:

(最多只允许输入30个字)