c 析構相關 待看

2021-07-28 09:03:02 字數 1898 閱讀 8152

先說乙個小發現,在delete 的時候,是按照與構造順序相反的順序來析構的!(原來的構造順序指的是,new 的時候,是按照下標順序構造的)

#include 

using

namespace

std;

class log

~log()

private:

int id;

};int main()

上面**的輸出結果為:

destruct 3

destruct 2

destruct 1

destruct 0

據說編譯器內部是通過「常量指標」來實現引用的,首先從它的大小來看一下:

#include 

using

namespace

std;

class log

~log()

private:

int id;

};};

int main()

輸出結果是:8 4

8是乙個指標的大小!ps,不能直接通過sizeof(ref)來判斷,因為這樣會輸出4 4,計算的是ref所引用的物件的大小。

下乙個主題需要區分指標(型別的)常量和(指向)常量(的)指標,相信看了左邊括號裡的注釋,應該都清楚了吧?

還不清楚,只能po我自己的私藏筆記了:

常量指標,顧名思義,就是指向乙個常量的指標,比如:

const

intid = 555;

const

int* p1 = &id;

intconst* p2 = &id;

*p1 = 233; // 錯誤!不允許通過指標修改變數的值,因為指向的是常量

int hello = 666;

p1 = p2 = &hello; // 可以給指標重新賦值,指標本身不是常量

它的特點是,不能通過指標去修改所指向變數的值,常用於函式傳參時宣告變數內容不允許被修改(當然也可以用常引用)。

xx常量指的是這個變數是乙個常量,不能修改其值,所以,「指標常量」指的就是這樣的形式:

int

id = 233, id2 = 555;

int* const p = &id;

id = 666;

p = &id2;// 錯誤!p是乙個常量,不允許修改它的值

p = &id;// 錯誤!這樣也不行,不要以為p的值等於&id就可以給它賦值,哼╭(╯^╰)╮

你可以修改原始變數的內容(只要它不是const修飾的),但是不能改變指標的值,也就是說,這個指標就只能被指定為指向這個變數了!

據說,編譯器內部用常量指標來實現引用!(只是傳言而已)

直接po**,**清晰得,都不用解釋的^_^

#include 

#include

#include

#include

#include

#include

using namespace std;

class log

log& operator = (const log& rhs)

void display() const

private:

int id;

};templateclass reference

t& operator = (t& object)

};int main()

輸出結果是:

log

233log

666

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

C 析構函式

析構函式 destructor 也是乙個特殊的成員函式,它的作用與建構函式相反,它的名字是類名的前面加乙個 符號。在c 中 是位取反運算子,從這點也可以想到,析構函式是與建構函式作用相反的函式。當物件的生命期結束時,會自動執行析構函式。具體地說如果出現以下幾種情況,程式就會執行析構函式 1.如果在乙...

C 析構函式

之前一直想看c 中,子類 基類的析構函式的呼叫過程,使用編輯器vs時,要使執行視窗不消失就需要在main函式中的return 0 語句之前加上system pasue 或getch 之類的語句,這種方式使得一直無法執行到析構函式,無法檢視析構函式的呼叫過程 解決方法 ctrl f5執行程式後會生成....