美文网首页
C++中的对象销毁

C++中的对象销毁

作者: nethanhan | 来源:发表于2017-10-14 10:33 被阅读0次

    对象的销毁


    • 一般而言,需要销毁的对象都应该做清理
    • 解决方案
      • 为每个类都提供一个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;
    }
    
    • 析构函数的定义准则:
      • 当类中自定义了构造函数,并且构造函数中使用系统资源(如:内存申请,文件打开,等),则需要自定义析构函数。

    相关文章

      网友评论

          本文标题:C++中的对象销毁

          本文链接:https://www.haomeiwen.com/subject/wtjxuxtx.html