14、不一样的C++系列--对象销毁

来源:互联网 发布:润锦众成网络借贷 编辑:程序博客网 时间:2024/05/21 08:57

对象的销毁


  • 一般而言,需要销毁的对象都应该做清理
  • 解决方案
    • 为每个类都提供一个public的free函数
    • 对象不再需要时立即调用free函数进行清理

就比如这样:

class Test{    int* p ;public:    Test() {p = new int;}    void free() {delete p;}}
  • 存在的问题
    • free只是一个普通的函数,必须显示的调用
    • 对象销毁前没有做清理,很可能造成资源泄露

析构函数


  • C++的类中可以定义一个特殊的清理函数
    • 这个特殊的清理函数叫做析构函数
    • 析构函数的功能与构造函数相反
  • 定义: ~className()
    • 析构函数没有参数也没有返回值类型声明
    • 析构函数在对象销毁时自动被调用
#include <stdio.h>class Test{    int mi;public:    //重载构造函数    Test(int i)    {        mi = i;        printf("Test(): %d\n", mi);    }    //析构函数    ~Test()    {        printf("~Test(): %d\n", mi);    }};int main(){    Test t(1);    Test* pt = new Test(2);    //自动会调用析构函数    delete pt;    return 0;}
  • 析构函数的定义准则:
    • 当类中自定义了构造函数,并且构造函数中使用系统资源(如:内存申请,文件打开,等),则需要自定义析构函数。
原创粉丝点击