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

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

析构函数的特点:

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"<

 

转载于:https://www.cnblogs.com/XYQ-208910/p/4912118.html

你可能感兴趣的文章
ActiveMQ中JMS的可靠性机制
查看>>
oracle操作字符串:拼接、替换、截取、查找
查看>>
”语义“的理解
查看>>
210. Course Schedule II
查看>>
月薪3000与月薪30000的文案区别
查看>>
使用spring dynamic modules的理由
查看>>
Leetcode 117 Populating Next Right Pointers in Each Node 2
查看>>
C++ Primer 第四版中文版
查看>>
变量关系
查看>>
NTP工作机制及时间同步的方法
查看>>
近段时间学习html和CSS的一些细碎总结
查看>>
第三章 栈和队列
查看>>
「Vue」v-html生成的图片大小无法调整的解决办法
查看>>
【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
查看>>
Git 的 .gitignore 配置
查看>>
Language Integrated Query ----序
查看>>
【HDU】1542 Atlantis
查看>>
解决Android SDK Manager更新时出现问题
查看>>
Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法
查看>>
第二章 第四节 添加SWT库
查看>>