读书人

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

发布时间: 2012-05-24 11:55:41 作者: rapoo

请教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两种方式没有区……

读书人网 >C++

热点推荐