对象的销毁

  • 引入话题:
  1. 生活中的对象都是被初始化后才上市的
  2. 生活中的对象被销毁前会做一些清理工作
  3. 问题:C++中如何清理需要销毁的对象
  4. 一般而言,需要销毁的对象都应该做清理
  • 解决方案:
  1. 为每个类都提供一个public的free函数
  2. 对象不再需要时立即调用free函数进行清理
1 class Test
2 {
3     int*p;
4 public:
5     Test() {p = new int;}
6     void free() {delete p;};
7 };
  • 存在的问题
  1. free只是一个普通的函数,必须显示调用
  2. 对象销毁前没有做清理,很可能造成资源泄露
  3. C++编译器是否能够自动调用某个特殊的函数进行对象的清理?
  • 析构函数
  1. C++的类中可以定义一个特殊的清理函数
  2. 这个特殊的清理函数叫做析构函数
  3. 析构函数的功能与构造函数相反
  • 定义:~ClassName()
  1. 析构函数没有参数也没有返回值类型声明
  2. 析构函数在对象销毁时自动调用
  3. 析构函数是不能重载的
 1 #include <stdio.h>
 2 class Test
 3 {
 4      int mi;
 5 public:
 6      Test(int i)
 7      {
 8            mi = i;
 9            printf("Test():%d\n",mi);
10      }
11      ~Test()
12      {
13            printf("~Test():%d\n",mi);
14      }
15 };
16 int main()
17 {
18      Test t(1);
19      Test*pt = new Test(2);
20      delete pt;
21      return 0;
22 }
23 运行结果:
24 Test():1
25 Test():2
26 ~Test():2
27 ~Test():1
28 请按任意键继续. . .
  • 析构函数的定义准则
当类中定义了构造函数,并且构造函数中使用了系统资源(如内存申请,文件打开等),则需要自定义析构函数
  • 小结:
  1. 析构函数是对象销毁时进行清理的特殊函数
  2. 析构函数在对象销毁时自动被调用
  3. 析构函数是对象释放系统资源的保障
 
 
 
 
 

原文链接: https://www.cnblogs.com/chengeputongren/p/12177263.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    对象的销毁

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/324213

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午1:08
下一篇 2023年3月1日 下午1:08

相关推荐