預設析構函式 空函式?

2021-10-11 03:11:36 字數 465 閱讀 2505

如果是初級的c++入門書籍會告訴你,預設的構造和析構函式都是空函式,他不做任何操作。

但實際情況是,嚴格上來說這句話是錯誤的。應該分情況討論如下:

乙個類是plain old data型別的,即該類的建構函式和析構函式都是平凡的(trivial的),若該類的預設構造/析構函式存在,則他們是空函式。

如果乙個類不滿足pod條件,即該類是非平凡的(non-trivial的),則預設析構函式不是空函式,它將是類中非平凡的類成員變數的析構函式的合成函式。(建構函式情況稍微複雜,此處不討論)

pod指的是這樣一些資料型別:基本資料型別、指標、union、陣列、建構函式是 trivial 的 struct 或者 class。

c++中的普通舊資料結構是乙個聚合類,它只包含plain old data 作為成員,沒有使用者定義的析構函式,沒有使用者定義的複製賦值操作符,也沒有指標到成員型別的非靜態成員。

C 預設析構函式

1.與建構函式一樣,假如我們不指定自己的析構函式,那麼編譯器將為我們建立乙個預設析構函式。析構函式 destructor 也是一種特殊的成員函式,沒有返回值,不需要使用者呼叫,而是在銷毀物件時自動執行。與建構函式不同的是,析構函式的名字是在類名前面加乙個 符號。注意 析構函式沒有引數,不能被過載,因...

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

C 析構函式 虛析構函式

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