c 中的析構函式與建構函式的區別

時間 2021-08-30 10:54:02

1樓:匿名使用者

c++中的析構函式與建構函式的區別主要是功能上的區別:

建構函式 ,是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。

析構函式(destructor) 與建構函式相反,當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函式中用delete釋放)。

例子:#include

using namespace std;

class t

~t() //為了簡潔,函式體可以直接寫在定義的後面,此時函式為內聯函式

};int main();

2樓:

建構函式是用來完成成員初始化的,析構是執行完程式釋放掉變數的儲存空間

c++問題: 類的建構函式和析構函式有什麼用?與普通賦值函式有什麼區別?(最好講清楚些)

3樓:匿名使用者

有的類,需要進行一些初始化,比如賦初值、預設值,為類成員申請臨時空間,這些工作可以在建構函式中完成;析構函式可以將建構函式中申請的臨時空間釋放,也可以逐一檢查類中成員如果申請了臨時空間也一一釋放。

4樓:匿名使用者

當對來象脫離其作用域自時(例如物件所bai在的函式已呼叫完du畢),系統自動執zhi行析構函式。

析構dao函式作用:用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函式中用delete釋放)。

在c++中:

析構函式名也應與類名相同,只是在函式名前面加乙個位取反符~,例如~stud( ),以區別於建構函式。它不能帶任何引數,也沒有返回值(包括void型別)。只能有乙個析構函式,不能過載。

如果使用者沒有編寫析構函式,編譯系統會自動生成乙個預設的析構函式(即使自定義了析構函式,編譯器也總是會為我們合成乙個析構函式,並且如果自定義了析構函式,編譯器在執行時會先呼叫自定義的析構函式再呼叫合成的析構函式),它也不進行任何操作。所以許多簡單的類中沒有用顯示的析構函式。

5樓:兄弟連教育北京總校

區別:建構函式是物件實體建立時呼叫的

析構函式是物件實體銷毀時候呼叫的

就這乙個區別,也就是提供了一種機制,讓你可以在這個時間段插入自定義的操作,初始化和釋放記憶體只是一種通常用法

c的類中在建構函式中呼叫析構函式會發生什麼

就跟呼叫成員函式一樣,在語法上是可行的 但是由於析構函式的功能,在語義上可能會有無法預料的結果因為在物件銷毀時會隱式呼叫一次,可能會出問題同時考慮這個 偽 class a a 這個屬於合法不合理的事,除非你析構設計的就是想隨時呼叫都沒事。 無論是在基類還是在子類,類的析構函式都是不允許被顯式呼叫的,...

設計簡單的C 程式,要求包括建構函式,解構函式和複製函

我們課堂上剛練習了,同學,給你吧。include using namespace std class point point point p 拷貝建構函式 friend point move point q 友元函式宣告 point 解構函式int getx int gety point point...

c中建構函式和解構函式能不能被顯示呼叫

1 c 中,建構函式和解構函式可以被顯示呼叫.顯示呼叫預設建構函式的語法 a.a a 不能寫成a.a 顯示呼叫非預設建構函式的語法 a.a a 7 不能寫成a.a 7 顯示呼叫解構函式的語法 a.a a 可以寫成a.a 2 顯示呼叫建構函式和解構函式就像呼叫一般的函式一樣,並不意味著建立或銷燬物件 ...