首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问C++析构函数的使用方法

2012-05-24 
请教C++析构函数的使用方法请教C++析构函数的使用方法,里面都需要哪些操作,(本人先前,里面是空的。。。),哪些

请教C++析构函数的使用方法
请教C++析构函数的使用方法,里面都需要哪些操作,(本人先前,里面是空的。。。),哪些情况是系统自动调用,哪些情况手动,还有以下的小程序,求解释:
#include <iostream>

using namespace std;

class Base{
  public:
Base()
{
cout<<"B ";
}
  virtual ~Base() {cout<<"~B ";}
};
 
class Derived:public Base{
  public:
Derived()
{
cout<<"D ";
}
  virtual ~Derived() {cout<<"~D ";}
};
 
void my()
{
  // Base *b=new Derived;
//Derived d;
//Base *b = new Base;
Derived *d = new Derived;
cout<<"do ";
// delete &d;
}
void my2()
{
Derived d;
cout<<"do ";
delete &d; //结果:B D do ~D ~B 程序崩溃
}

void my3()
{
Derived *d = new Derived;
cout<<"do "; //结果:B D do
}

void my4()
{
Derived *d = new Derived();
cout<<"do "; //结果:B D do
}

void my5()
{
Derived *d = new Derived;
cout<<"do ";  
delete d;//结果:B D do ~D ~B
}

void my6()
{
Base *b=new Derived;
cout<<"do "; //结果:B D do
}

void my7()
{
Base *b=new Derived();
cout<<"do ";  
delete b;
//结果:结果:B D do ~D ~B
}

int main (){
  my7();
  getchar();
}

这三种有什么区别,都做了哪些事情,为什么只能new指针:
Derived *d = new Derived;
Derived *d = new Derived();
Derived d;

[解决办法]
析构函数一般用来清除资源。如计数器清零。释放分配的动态内存。
new 是C++的语法,返回对象的一个新的实例的指针,调用new时会调用类的构造函数。

直接定义一个某种类型的变量,如果这个变量被使用到,编译器会在使用这个变量之前插入这个类的构造函数,在退出作用范围(如函数内定义了一个变量,在函数返回前)前生成析构函数的调用。

构造函数和析构函数是隐式调用的,你不需要显式的给出这两个函数的调用。
[解决办法]

C/C++ code
Derived *d = new Derived;   // 1Derived *d = new Derived(); // 2Derived d;                  // 3
[解决办法]
对象作用域结束的时候自动调用析构函数,如果在作用域结束前想释放对象,那就手动调用。
析构函数一般用于释放系统无法自动回收的内存,如new 和malloc创建的内存
[解决办法]
探讨

引用:

C/C++ code

Derived *d = new Derived; // 1
Derived *d = new Derived(); // 2
Derived d; // 3



1. 第1、2两种方式,是将对象创建在堆上,第3种情况是将对象创建在栈上
2. 在你给出的代码中,第1、2两种方式没有区……

热点排行