文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++对象的销毁之析构函数实例分析

2023-06-30 05:18

关注

本文小编为大家详细介绍“C++对象的销毁之析构函数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++对象的销毁之析构函数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、对象的销毁

解决方案

如下:

C++对象的销毁之析构函数实例分析

存在的问题

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

二、析构函数

C++ 的类中可以定义一个特殊的清理函数

定义:~ClassName()

下面开始简单使用析构函数:

#include <stdio.h> class Test{public:    Test()    {        printf("Test()\n");    }    ~Test()    {        printf("~Test()\n");    }}; int main(){    Test t;        return 0;}

输出结果如下:

C++对象的销毁之析构函数实例分析

t 虽然是对象,但是本质上也是局部变量,在 return 0 之前会销毁,t 被销毁时析构函数会被自动调用。

下面再来看一个例子:

#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++对象的销毁之析构函数实例分析

析构函数的定义准则

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

下面再来看一个实验:

IntArray.h:

#ifndef _INTARRAY_H_#define _INTARRAY_H_ class IntArray{private:    int m_length;    int* m_pointer;public:    IntArray(int len);    IntArray(const IntArray& obj);    int length();    bool get(int index, int& value);    bool set(int index ,int value);    ~IntArray();}; #endif

IntArray.cpp:

#include "IntArray.h"#include "stdio.h"   IntArray::IntArray(int len) {     m_pointer = new int[len];          for(int i=0; i<len; i++)     {         m_pointer[i] = 0;     }          m_length = len; }   IntArray::IntArray(const IntArray& obj) {     m_length = obj.m_length;          m_pointer = new int[obj.m_length];          for(int i=0; i<obj.m_length; i++)     {         m_pointer[i] = obj.m_pointer[i];     } }   int IntArray::length() {     return m_length; }   bool IntArray::get(int index, int& value) {     bool ret = (0 <= index) && (index < length());          if( ret )     {         value = m_pointer[index];     }          return ret; }   bool IntArray::set(int index, int value) {     bool ret = (0 <= index) && (index < length());          if( ret )     {         m_pointer[index] = value;     }          return ret; }   IntArray::~IntArray() {    printf("do it\n");     delete[]m_pointer; }

main.cpp:

#include <stdio.h>#include "IntArray.h" int main(){    IntArray a(5);            for(int i=0; i<a.length(); i++)    {        a.set(i, i + 1);    }        for(int i=0; i<a.length(); i++)    {        int value = 0;                if( a.get(i, value) )        {            printf("a[%d] = %d\n", i, value);        }    }        IntArray b = a;        for(int i=0; i<b.length(); i++)    {        int value = 0;                if( b.get(i, value) )        {            printf("b[%d] = %d\n", i, value);        }    }        return 0;}

输出结果如下:

C++对象的销毁之析构函数实例分析

可以看到 do it 输出两次,也就是说析构函数被自动调用两次。

读到这里,这篇“C++对象的销毁之析构函数实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯