C++析构函数

匿名 (未验证) 提交于 2019-12-03 00:08:02
  • 背景:用构造函数创建对象后,程序负责追踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数――析构函数

  • 作用:
    完成清理工作,所以必须有一个析构函数
    ①如果构造函数使用new来分配内存,则析构函数使用delete来释放内存;
    ②如果构造函数没有使用new,那么析构函数无任务,此时让编译器生成一个什么都不要做的隐式析构函数就行

  • 特点:
    如果程序员没有提供析构函数,编译器将隐式地声明一个默认析构函数,并在发现导致对象被删除的代码后,提供默认析构函数的定义。

  • 格式:
    在类名前加上~;且与构造函数不同的是,析构函数从来没有参数。
    如果程序员要提供,那么析构函数格式如下:
    ①原型格式:如一个叫Stock的类要写一个析构函数,原型如下:
    ~Stock();
    ②函数格式:因为析构函数不承担任何重要的工作,因此可以将它编写为不执行任何操作的函数

Stock::~Stock() { } 
  • 一些细节问题:
    (1)什么时候应调用析构函数呢?
    由编译器决定,通常不要在代码中调用
    (2)创建对象的方式不同,析构函数在程序结束是怎么做的?
    对存储类不了解的可以看这里 C++存储类
    ①如果创建的是静态存储类对象,则其析构函数将在程序结束自动被调用;
    ②如果创建的是自动存储类对象,则其析构函数将在程序结束时自动被调用;
    ③如果通过new创建对象,则它将驻留在栈内存或自由存储区中,当使用detele来释放内存,其析构函数将自动被调用。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!