C++ 析构函数

析构函数的概念

于构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作

析构函数的作用

  清理对象中的资源(从堆上申请的资源,打开的文件)

析构函数的使用

在对象的生命周期结束时,C++编译器会自动调用析构函数,若用户没有显式定义析构函数,则编译器会自动生成默认析构函数,一般情况下在类中不涉及资源的管理可以不给出析构函数,但若在类中涉及资源管理就要用户显式的给出自定义析构函数

class String{
	
public:
		String(char* str = "")//构造函数
		{
			cout<<this<<"String()"<<endl;
			_str = (char*)malloc(sizeof(char)*(strlen(str)+1));
			strcpy(_str,str);
		}
		~String()//析构函数   _str在堆上申请空间
		{
			if(_str)
			{
			 cout<<this<<"~String()"<<endl;
			 free(_str);
			 _str = nullptr;

			}
		
		}

private:
	char* _str;
};
class student{

public:
	student()
	{
	cout<<this<<"student"<<endl;
	
	}
   ~student()//析构函数:无返回值,无参,用来释放对象中的资源
	    //一个类中只能有一个析构函数,在对象的生命周期结束时,C++编译器会自动调用
   {
	   cout<<this<<"~student"<<endl;
              }
	

private:
	String _name;
	String  _gender;
	int _age;
};
void Test()
{
	
	String s1("hello");
	String s2("你好");
	student stu1;

}

int main()
{
	Test(); 
	system("pause");
}

运行结果: 

 

在student类中不析构函数没有做什么事,实际上是可以不用显式给出的,在这里给出是为了方便观察函数调用的过程

特性

(1)函数名为类名前加上“~”;

(2)析构函数无参数无返回值;

(3)一个类有且只有一个析构函数;

(4)若在内中没有给出析构函数,则系统会自动生成缺省的析构函数;

(5)对象生命周期结束时,C++编译系统自动调用析构函数;

(6)析构函数的函数内部实现的并不是删除对象,而是做一些清理工作;

(7)一般来讲,若不需要进行特殊的清理工作(如动态释放等),使用系统缺省的析构函数即可。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值