如何使用C++析構函數

析構函數

析構函數通常用於釋放在構造函數或在對象生命期內獲取的資源(如動態分配的內存) 。
 

析構函數的作用並不僅限於釋放資源方面, 它可以包含任意操作, 用來執行“對象即將被撤銷之前程序員所期待的任何操作” 。
 

如果類需要析構函數, 則該類幾乎必然需要定義自己的複製構造函數和賦值運算符重載, 這個規則稱爲析構函數三法則(rule of
three) 。
 

程序

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

class CString

{
private:
    /* data */
    char *p;//存儲字符串動態內存區
public:
    CString(const char *str);//單個參數構造函數
    ~CString();//析構函數

    void show(){
        //顯示字符串
        cout<<"show:"<<p<<endl;
    }
};

CString::CString(const char *str){

    p=new char[strlen(str)+1];
    //申請分配存儲動態內存區

    strcpy(p,str);//複製str到p

    printf("構造str:%s\n",str);
    //printf("構造p:%s\n",p);
}

CString::~CString(){

    cout<<"析構"<<p<<endl;

    delete [] p;
    //釋放申請內存區

}

int main(){

    CString obj1="obj1";

    CString obj2("obj2");
    //實例類CString的obj1,obj2兩個對象
/****
    obj1.show();

    obj2.show();
****/
    return 0;

}

構造函數和析構函數的調用很像一個棧的先進後出, 調用析構函數的次序正好與調用構造函數的次序相反。 最先被調用的構造函數,其對應的(同一對象中的) 析構函數最後被調用, 而最後被調用的構造函數, 其對應的析構函數最先被調用。


可簡述爲: 先構造的後析構, 後構造的先析構。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章