第22课 对象的销毁

1. 对象的销毁

(1)对象的销毁

  • 生活中的对象都是被初始化后才上市的(从而引入了构造函数

  • 生活中的对象销毁前会做一些清理工作

 

(2)问题:C++中如何清理需要销毁的对象?

  • 一般而言,需要销毁的对象都应该做清理

  • 解决方案:

    • 每个类都提供一个publicfree函数

    • 对象不再需要时立即调用free函数进行清理

class Test
{
int *p;
public:
  Test() { p = new int; }
  void free() { delete p; };
};
  • 存在的问题:
    • free只是一个普通的函数必须显示的调用

    • 对象销毁前没有做清理工作很可能造成资源泄露

 

2. 析构函数

(1)C++的类中可以定义一个特殊的清理函数,叫析构函数

(2)析构函数功能构造函数相反

(3)定义:~ClassName();    //注意,无参无返回值对象销毁时会被自动调用

 

【编程实验】析构函数的使用初探  22-1.cpp

#include <stdio.h>

 

class Test
{

private:

    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;

}

运行结果:

//Test(): 1

//Test(): 2

//~Test(): 2

//~Test(): 1

 

3. 析构函数的定义准则

  当类中自定义了构造函数,并且构造函数中使用了系统资源(如:内存申请、文件打开等),则需要自定义析构函数

 

4. 小结

(1)析构函数对象销毁时进行清理的特殊函数

(2)析构函数对象销毁时自动被调用

(3)析构函数对象释放系统资源的保障

posted @ 2018-12-09 16:32  梦心之魂  阅读(117)  评论(0编辑  收藏  举报