博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++:析构函数
阅读量:7124 次
发布时间:2019-06-28

本文共 1835 字,大约阅读时间需要 6 分钟。

析构函数的特点:

1、析构函数与类名相同,但它前面必须加上波浪号~
2、析构函数不返回任何值,在定义析构函数时,是不能说明它的类型的,甚至说明void类型也不能
3、析构函数没有参数,因此不能被重载。一个类可以有多个构造函数,但是只能有一个析构函数 
4、撤销对象时,编译系统会自动调用析构函数

//例3.13  含有析构函数和构造函数的Conplex类 #include
#include
using namespace std;class Complex{ public: Complex(double r=0.0,double i=0.0); //声明默认参数的构造函数 ~Complex(); //声明析构函数 double abscomplex(); //声明abscomplex函数 private: double real; double imag; }; Complex::Complex(double r,double i) //定义构造函数 { real = r; imag = i; cout<<"Constructor called"<

说明:

(1)每个类必须有一个析构函数。若没有显式的为一个类定义析构函数,则编译系统
会自动生成一个默认的析构函数。例如,编译系统为类Complex生成类似如下述形式的默认
析构函数:Complex::~Complex(){}
类似于系统自动生成的默认构造函数,这个自动生成的默认析构函数的函数体也是空的,但是
它能完成释放对象所占的内存空间的任务。
对于大多数类而言,这个默认析构函数就能满足要求。但是,如果在一个对象撤销之前
需求完成另外一些处理工作的话,则应该显示地定义析构函数,例如:

class String_data{ public:       String_data(char *s)  //构造函数        {         str = new char[strlen(s)+1]; //用运算符new为字符串str动态的分配一个存储空间          strcpy(str,s);        }       ~String_data();  //析构函数       {         delete str;    //用delete运算符释放动态分配的存储空间        }        void get_info(char *);       void sent_info(char *); private:       char *str;        };

这是构造函数和析构函数常见的用法,即在构造函数中用new运算符为字符串分配存储空间

,最后在析构函数中通过delete运算符释放已分配的存储空间。

(2)除了在主函数结束(或调用exit函数)时,对象被撤销,系统会自动调用析构函数函数

外,在以下的情况下,析构函数也会被调用:
a、如果一个对象被定义在函数体内,则当这个函数被调用结束时,该对象将释放,析构
函数被自动调用。
b、若一个对象是使用new运算符动态创建的,在使用delete运算符释放它时,delete会
自动调用析构函数。

#include
using namespace std;class String_data{ public: String_data(char *s) //构造函数 { str = new char[strlen(s)+1]; //用运算符new为字符串str动态的分配一个存储空间 strcpy(str,s); } ~String_data() //析构函数 { cout<<"Destructor"<

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4912118.html
,如需转载请自行联系原作者
你可能感兴趣的文章
css知识:flex 、bfc
查看>>
设计模式系列之「建造者模式」
查看>>
数据结构—线性表
查看>>
Mybatis技术内幕(2.3.5):反射模块-Property工具类
查看>>
软件测试工程师的技能树
查看>>
聊聊架构
查看>>
小米4.0系统如何不Root激活xposed框架的方法
查看>>
Android跨界面共享数据——LiveData应用
查看>>
华为余承东:自产AI芯片 旗舰机比苹果、三星强
查看>>
微软Azure SQL数据仓储供优惠价格购买预留容量
查看>>
Java8ConcurrentHashMap
查看>>
数据分析Power BI数据可视化教程(三)——如何创建矩阵和表以及散点图
查看>>
NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
查看>>
Vue组件传值
查看>>
react-native搭建用例(非CRNA)
查看>>
HTTP协议
查看>>
github简单使用
查看>>
Python提取网站数据笔记
查看>>
隐私政策
查看>>
一些个人认为值得推荐的IT编程技术社区、博客或文章收集与分享
查看>>