浅谈析构函数

在面向对象的程序设计之中,一般的类之中最重要的四个函数为:

1.构造函数

2.赋值函数(重载=)

3.拷贝构造函数

4.析构函数


示例:

<span style="font-size:14px;">#include <bits/stdc++.h>
using namespace std;

class B{
private:	
	   int x,y;
public:
	B()
	{
	   x=y=0;
	   cout<<"constructor1"<<endl;
	};
	
	B(int i){
	   x=i;y=0;
	   cout<<"constructor2"<<endl;
	};
		
	B(int i,int j)
	{
           x=i;y=j;
	   cout<<"constructor3"<<endl;
	};
		
	virtual ~B(){
	    cout<<"Destructor"<<endl;
	};
		
	void print(){
            cout<<"x="<<x<<' '<<"y="<<y<<endl;
	};
	
};
int main(int argc, char** argv) {
	B *p;
	int i;
	p=new B[3];
	p[0]=B();
	p[1]=B(1);
	p[0]=B(2,3);
	for(i=0;i<3;i++){
            p[i].print();
	}
	delete []p;
	return 0;
}


 </span>

运行的结果是:



一开始在想为什么在new对象申请了三个空间之后(调用三次构造函数)第四个构造函数紧接着就调用了一次析构函数。

因为在赋值的过程中创建了一个临时变量来进行赋值,在系统默认的赋值函数结束之后析构了临时的对象。


析构函数一般在以下几个情况被调用:

1. 全局对象、静态全局对象在主函数执行之前被构造,直至主函数结束后析构。

2.静态局部对象在其所在的函数第一次被调用时创建,直至主函数结束后析构。.

3..局部自动对象(包括值传递的形参对象)在其所在函数调用时创建,函数返回后析构。

4..函数值返回的临时对象在函数返回时创建,在参与其所在的表达式运算后析构。

5..动态对象(堆对象)在执行new操作时创建,在执行delete时析构。

而且析构顺序为(反向析构):派生类—> 组合成员对象—>非虚基类—>虚基类



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值