構造與析構的順序問題與C 中虛函式之間的聯絡

2022-09-08 02:15:08 字數 445 閱讀 7084

基類的成員物件的建構函式

基類的建構函式

子類的成員物件的建構函式

子類的建構函式

子類的成員物件的析構函式

子類的析構函式

基類的成員物件的析構函式

基類的析構函式

由上可推測,在c++中呼叫基類指標建立子類物件時,由於析構函式會優先呼叫基類指標所指的基類析構函式,但是記憶體中建立的是子類物件,因此當銷毀時會導致使用基類析構函式去析構子類物件,進而發生不確定錯誤。

總結一下,就是c++中當基類指標要求被銷毀時,其析構函式要作為虛析構函式;其餘情況一般不作為虛函式——虛函式需要占用額外的記憶體用來分配虛函式表。

因此,原則就是基類的析構函式要作為虛析構函式;其餘析構函式就作為普通析構函式即可。

除此以外,建構函式一定不能是虛函式。建構函式必須明確類的初始化細節,而不是抽象的進行宣告。

C 類構造與析構順序

1.虛基類建構函式被呼叫,以繼承順序從左到右 如果存在虛基類 2.上一層非虛基類建構函式被呼叫,以繼承順序從左到右而非成員初值列上寫的順序 顯示呼叫或缺省構造 如果存在非虛基類 3.虛表指標指向適當虛表 如果類存在虛表指標 4.類資料成員初始化,以宣告的順序而非成員初值列上寫的順序。5.執行使用者所...

c 析構 建構函式與虛函式

虛函式的意義很簡單,就是動態繫結,從而完成多型。沒有太大的疑問。但是關於虛函式的使用,有兩種情況比較特殊,需要留意 建構函式和虛構函式。在例項化乙個類時,會按照父類 成員變數 子類的建構函式依次呼叫建構函式,析構的時候,會按照相反的次序依次呼叫析構函式。如果在建構函式 析構函式中呼叫虛函式,或者呼叫...

c 構造與析構

c 中還提供了一些封裝方法 構造方法 析構方法 一 在宣告乙個類的物件後,要對該物件進行初始化,即對物件中的資料成員賦值 建構函式 用於建立乙個物件,提供初始化該物件的簡單手段 函式語法 建構函式的函式名必須與類名相同 它沒有返回值 作用為初始化物件 其呼叫是在宣告物件時候自動呼叫 python中的...