22_对象的销毁

作者:计算机教程

C 中如何清理需要销毁的对象?C 编译器是否能够自动调用某个特殊的函数进行对象的清理?,销毁编译器

生活中对象都是被初始化后才上市的 生活中的对象被销毁前会做一些工作

1. 对象的销毁

  • 生活中的对象都是被初始化后才上市的
  • 生活中的对象被被销毁前会做一些清理工作
  • 一般而言,需要销毁的对象都应该做清理
  • 解决方案:为每个类都提供一个publicfree函数,对象不再需要 时立即调用free函数进行清理。
  • free函数存在的问题:free只是一个普通的函数nba买球,必须显示的调用,如果对象销毁前没有做清理,很可能造成资源泄漏

问题1 : C 中如何清理需要销毁的对象?

一般而言,需要销毁的对象都应该做清理 解决方案

为每个类都提供一个public的free函数 对象不再需要时立即调用free函数进行清理 

class Test
{
    int* p;
public:
    Test() { p = new int ;};
    void free() {delete p ;};
};

存在的问题 

free只是一个普通的函数, 必须显示的调用 对象销毁前没有做清理, 很可能造成资源泄露

问题: C 编译器是否能够自动调用某个特殊的函数进行对象的清理?

问题2: C 编译器是否能够自动调用某个特殊的函数进行对象的清理?

2. 析构函数

  • C 类中可以定义一个特殊的清理函数,这个特殊的清理函数叫做析构函数,其功能与构造函数相反
  • 定义:~ClassName()
  • 析构函数没有参数没有返回值类型声明,其在对象销毁时自动被调用

编程说明:析构函数的初探

#include <stdio.h>

class Test
{
private:
    int mi;
public:
    Test(int i)
    {
        mi = i;
        printf("Test():%dn", mi);
    }
    ~Test()
    {
        printf("~Test():%dn", mi);
    }
};

int main()
{
    Test t(1);

    Test* pt = new Test(2);

    delete pt;

    return 0;
}

输出结果:

Test():1
Test():2
~Test():2
~Test():1

本文由nba买球发布,转载请注明来源

关键词: