小朋友学C++(17):析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。

析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~A( )。以区别于构造函数。 与构造函数一样,析构函数不能有返回值。不同的是,析构函数,也不能带参数,并且一个类只能有一个析构函数。

如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数。 许多简单的类中没有使用用显式的析构函数。

例子:

#include <iostream>
using namespace std;
class A
{
public:
    A()
    {
        cout << "Constructor method is invoked!" << endl;   
    }
    ~A()
    {
        cout << "Deconstructor method is invoked!" << endl;
    }
    void sayHi()
    {
        cout << "Hi!" << endl;
    }
};
int main()
{    
    A *a = new A();
    a->sayHi();
    delete a;
    return 0;
}

运行结果:

Constructor method is invoked!
Hi!
Deconstructor method is invoked!

原文发布于微信公众号 - 海天一树(gh_de7b45c40e8b)

原文发表时间:2017-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】C语言位

位制就是为了减小存储大小,把一个char, unsigned int, int的存储空间进行拆分后,对每个进行操作。 给出一段代码: #include <st...

33370
来自专栏小古哥的博客园

读书笔记《PHP与MySQL程序设计》一

第1章 PHP概述 1.1  历史(PHP4、PHP5、PHP5.3、PHP6[未发布]) 1.2 一般语言特性(实用性、强大功能、可选择性、成本[开源]) 第...

41660
来自专栏一“技”之长

Swift专题讲解十八——异常处理 原

        代码的运行很多时候并不会完全按照程序员的设想进行,编写代码时进行可控的异常处理机制是十分必要的。通常,对于一个特定的操作,程序员可以定义一个继承...

8320
来自专栏编程

Python读书笔记5

上期分享了Python相关的字符串应用,重点分享了转义字符。今天和大家分享和字符串相关的函数和应用。 一、字符串的合并! Python用“+”号可以连接两个文本...

22670
来自专栏大前端_Web

javascript高级程序设计(4-5)章笔记

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

11040
来自专栏猿人谷

小瓜牛漫谈 — String

String 类在 Java 中代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 1 public static voi...

19890
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列4

Java面试系列4 一、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以。必须只有一个类名与文件名相同。Public的类必须和文件...

36460
来自专栏Golang语言社区

Go语言语法汇总

最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考 数据类型 ---- var varName type,var var1,var2… type,...

354130
来自专栏猿人谷

malloc和new有什么区别

malloc和new有以下不同: new、delete是操作符,可以重载,只能在c++中使用。 malloc、free是函数,可以覆盖,c、c++中都可以使用。...

192100
来自专栏我的技术专栏

Java锁机制(一)synchronized

18840

扫码关注云+社区

领取腾讯云代金券