首页 > 代码库 > C++析构函数
C++析构函数
本文地址:http://www.cnblogs.com/archimedes/p/cpp-destructor.html,转载请注明源地址
功能:销毁对象前执行清除工作
格式:
[类名::]~类名()
{
....
}
class Student{public: Student(...); ~Student();//~符号 void display()const;private: int m_iNum; string m_strName; char m_cSex; };Student::~Student(){ cout<<"Destructor "<<endl;}… …
注意:
函数名与类名相同,且函数名前加~
没有参数、不能被重载
不指定返回值
常定义为public
对象生命期结束时自动调用
思考:
通常不需人为定义析构函数,什么时候必须定义析构函数?
一般,当类中含有指针成员,并且在构造函数中用指针指向了一块堆中的内存,则必须定义析构函数释放该指针申请的动态空间
#include<iostream>using namespace std;class String{public: String(); void display() const;private: char *m_pstr;};String::String(){ m_pstr = new char[1000]; strcpy(m_pstr, "hello");}void String::display() const{ cout<<m_pstr<<endl;}/*String::~String(){ //系统生成的}*/int main(){ String str; str.display(); system("pause"); return 0;}
看下面的代码,使用自己定义的析构函数--示例代码1:
#include<iostream>using namespace std;class String{public: String(); ~String(); void display() const;private: char *m_pstr;};String::String(){ m_pstr = new char[1000]; strcpy(m_pstr, "hello");}String::~String(){ delete []m_pstr;}void String::display() const{ cout<<m_pstr<<endl;}int main(){ String str; str.display(); system("pause"); return 0;}
示例代码2:
#include<iostream>using namespace std;class String{public: String(char *ap = "china"); ~String(); void display() const;private: char *m_pstr;};String::String(char *ap){ m_pstr = new char[strlen(ap)+1]; strcpy(m_pstr, ap);}String::~String(){ delete []m_pstr;}void String::display() const{ cout<<m_pstr<<endl;}int main(){ String str1("USA"); str1.display(); String str2; str2.display(); system("pause"); return 0;}
如果要定义析构函数,通常也需要定义拷贝构造函数和赋值运算符的重载函数。关于拷贝构造函数,可以参考《C++拷贝构造函数》
C++析构函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。