c++之说_9_5|自定义类型 struct 析构函数

文章详细介绍了析构函数的作用,包括自动调用时机(对象销毁时)、特性(无重载、无参、虚析构函数)、与new和delete的关系以及内存管理。重点强调了析构函数在清理工作和自动归还堆空间中的关键作用。
摘要由CSDN通过智能技术生成

析构函数同样作为struct 重要的特性之一

她和构造函数概念差不多

构造函数是对象创建时自动调用的

析构函数则是对象销毁时自动调用的

刚好是一对  对象生命周期 开始时  和 结束时

struct A

{

A(){} // 无参构造函数

~A(){} // 这个就是析构函数

}

析构函数特性:

一:

它是对象销毁时进行自动调用的  一般是拿来做清理工作的

二:

析构函数一个类中只能有一个(无重载)

三:

析构函数无参!无参! 这是与构造函数的不同

四:

析构函数可以是 虚析构函数  (加virtual 关键字)

五:

与构造函数一样  在析构或构造函数中 

无多态性 (父指针调用虚函数  不会从虚函数表中去调用子类的同名虚函数)

问,我们为何需要析构函数?

好问题,我以前也不知道为什么需要析构函数

后面我发现大概是 我学习路径的问题 

如果先学了new  和 delete  我应该就能理解了

所以现在 说说new 和 delete 关键字  

(说是关键字  我到感觉更像函数)

new 和 c语言中的 malloc 函数差不多 

在堆空间开辟空间

delete 和 c语言中的 free 函数差不多

归还之前在堆空间中开辟的空间

语法规则

new 类型名;//这里我感觉其实应该放调用类型的构造函数

注意 new 实例类型变量时  返回的是堆空间中的地址值  需要使用指针存储

delete 地址值;

注意

使用 new  返回从堆空间中 出来的地址值

我们一定是需要归还的 使用delete 

否则在遗失该地址值后 我们就会导致内存泄漏

 

struct B

{

int a;

B(int b):a(b){}

~B(){}

}

struct C

{

B* pB;

C()

{   

pB = new B();//error  使用了B 的无参构造函数 但是B中没有 无参构造函数

pB = new B(100);//ok  使用了B 的有参函数

 }

~C()

{

   delete pB;//归还堆空间  销毁该B类型的对象

既然是销毁B类型对象 当然

也会自动调用B类型的析构函数

}

}

 

int main()

{

C cobj;//调用无参构造 创建栈对象

return 0;// 函数结束  销毁函数栈中的栈变量  cobj 被销毁  

}

上述  我们在C类型的析构函数中

delete 掉 C类型构造函数中的 new 出来的地址值

有构造与析构的特性  达到了 自动归还堆空间的概念 

而这便是析构函数存在的意义  主要就是做清理工作

现有个问题,析构函数既然是函数  通过实例对象主动调用析构函数  这个实例对象会被销毁吗?

自己去试验试验

//main 函数中

C cobj;//调用无参构造 创建栈对象

cobj.~C();//主动调用析构

&cobj;

return 0;// 函数结束  销毁函数栈中的栈变量  cobj 被销毁  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值