美文网首页
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++之对象的销毁

    生活中对象都是被初始化后才上市的 生活中的对象被销毁前会做一些工作 问题1 : C++中如何清理需要销毁的对象? ...

  • C++中的对象销毁

    对象的销毁 一般而言,需要销毁的对象都应该做清理 解决方案为每个类都提供一个public的free函数对象不再需要...

  • C/C++学习笔记丨C++中的动态内存与智能指针

    在C++中,我们通过new(在动态内存中为对象分配空间并初始化对象)和delete(销毁该对象,并释放内存)直接分...

  • C++的new和delete详解

    new和delete的内部实现 C++中如果要在堆内存中创建和销毁对象需要借助关键字new和delete来完成。比...

  • C++ 中的new 和 java中的 new

    C++:创建实例 new创建的类对象需要指针来接收,该类对象使用完毕后需要使用delete销毁 new创建的对象使...

  • C++拷贝控制

    前言 C++通过在类中定义几个成员函数来控制的对象的拷贝,移动,赋值和销毁,分别如下: 拷贝构造函数和移动构造函数...

  • JAVA中的垃圾回收

    简介 在C/C++,程序员负责对象的创建和销毁,但等创建后使用完,常常忘记了去销毁,这样就会导致接下里去创建新的对...

  • 优雅地创建和销毁对象

    创建和销毁对象概述 何时以及如何创建对象 何时以及如何避免创建对象 如何确保对象适时地销毁 如何管理对象销毁之前必...

  • Python:重载构造方法

    对于使用过C++的人来说,构造函数与析构函数不会陌生。构造函数在对象创建时被调用,析构函数在对象被销毁时被调用。而...

  • C++学习笔记(面向对象)

    C++是一门面向对象的语言 类定义 & 对象 C++ 中的继承,多态,抽象

网友评论

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

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