析构函数

原创 2007年09月26日 11:28:00

一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。

当构造函数中使用了new,那么析构函数则使用delete。

析构函数不带任何参数,不返回任何东西(译注:void也不行)。

基类的析构函数一般设计成虚函数 是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。

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

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

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

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

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

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

C++ 默认析构函数

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

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

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

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

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

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

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

GeekBand学习笔记:C++三大函数:拷贝构造、拷贝赋值、析构函数

GeekBand学习笔记:C++三大函数:拷贝构造、拷贝赋值、析构函数C++中的类分为两种:带指针的类和不带指针的类,在设计不带指针的类的时候,不需要这三个函数数,因为默认的函数已经足够用了。但是在设...
  • u013835861
  • u013835861
  • 2016年03月01日 12:18
  • 521

关于析构函数和纯虚函数

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

MFC添加析构函数声明和定义的具体方法

在头文件中: {public: CChatApp(); ...} 中 CChatApp();的后面添加~CChatApp(); 在CPP文件中: CChatApp::CChatA...
  • sunstars2009918
  • sunstars2009918
  • 2011年02月23日 11:13
  • 5898
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:析构函数
举报原因:
原因补充:

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