--------------siwuxie095
析构函数
如果说构造函数是对象来到世间的第一声哭泣,那么析构函数
就是对象临终的遗言
析构函数在对象销毁时会被自动调用,完成的任务是归还系统
的资源,收拾最后的残局
析构函数的格式比起构造函数,就多了一个小尾巴,且析构函数
不允许加任何参数
如:
可能有人会做如下思考:
看如下实例:
如果定义数据时使用了指针,并且在构造函数中使用指针指向了堆中
分配的一块内存,即 使用 new 申请内存,在对象销毁时,就必须要
释放掉这块内存,否则就会造成内存的泄露
要释放这块内存,最好的时机就是对象被销毁之前,如果销毁早了,
其它的程序用到这些资源时就会报错,可见:设计一个在对象销毁
之前被自动调用的函数,就非常必要了
析构函数所做的工作就是释放掉堆中的内存
「析构函数的唯一功能,即 释放资源」
析构函数的特性:
结合构造函数和析构函数,总结:
程序:
Teacher.h:
#include <string> using namespace std;
class Teacher { public:
//有参默认构造函数 Teacher(string name = "Jim", int age = 1); //拷贝构造函数 Teacher(const Teacher &t); //析构函数 ~Teacher(); void setName(string name); string getName(); void setAge(int age); int getAge(); private: string m_strName; int m_iAge; }; |
Teacher.cpp:
#include "Teacher.h" #include <iostream> using namespace std;
Teacher::Teacher(string name, int age) :m_strName(name), m_iAge(age) { cout << "Teacher(string name, int age)" << endl; }
Teacher::Teacher(const Teacher &t) { cout << "Teacher(const Teacher &t)" << endl; }
Teacher::~Teacher() { cout << "~Teacher()" << endl; }
void Teacher::setName(string name) { m_strName = name; }
string Teacher::getName() { return m_strName; }
void Teacher::setAge(int age) { m_iAge = age; }
int Teacher::getAge() { return m_iAge; } |
main.cpp:
#include<stdlib.h> #include "Teacher.h" #include <iostream> using namespace std;
int main(void) { //从栈中实例化 Teacher t1; //直接初始化 Teacher t2(t1); //从堆中实例化 Teacher *p = new Teacher(); //delete p; 时会调用析构函数 delete p; system("pause"); return 0; } |
【made by siwuxie095】