1樓:釋寧泥緞
c++中
解構函式中不可以呼叫虛擬函式。
effective
c++中有這樣的描述:同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以
c++就將它們視為不再存在。
c++中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類的解構函式再呼叫基類的建構函式。
假設一個派生類的物件進行析構,首先呼叫了派生類的析構,然後在呼叫基類的析構時,遇到了一個虛擬函式,這個時候有兩種選擇:plan
a是編譯器呼叫這個虛擬函式的基類版本,那麼虛擬函式則失去了執行時呼叫正確版本的意義;plan
b是編譯器呼叫這個虛擬函式的派生類版本,但是此時物件的派生類部分已經完成析構,「資料成員就被視為未定義的值」,這個函式呼叫會導致未知行為。
2樓:皇文玉錯鵑
很簡單,你定義一個虛擬函式,然後在解構函式中呼叫看看,debug除錯,能執行就證明可以!
自己動手比實踐,比問別人「記住」一些規則,更有效果!
解構函式怎麼用,在c 中的,C 中的解構函式是怎麼呼叫的?
解構函式是一個類的例項銷燬的時候,被自動呼叫的函式,一般用來做一些清理性的工作。就是呼叫完類的實體物件後,需要呼叫解構函式 解構函式,就是善後處理,該物件的生命週期結束了,它負責善後的一些工作,如釋放已分配的記憶體等。你將該物件delete掉時,解構函式就自動執行了,不用你去呼叫它的。簡單的舉個例子...
c 解構函式的問題,C 關於解構函式的幾個問題
比如說,你的類裡邊有個char 你對它動態分配了記憶體,如果沒有解構函式,你是不是要在delete這個類的指標物件之前先delete這個char 的記憶體?現在有了解構函式,在解構函式中刪除char 的記憶體。這樣你之用delete一次就所有問題都搞定了,何樂而不為呢?解構函式是在這個類的生命期結束...
c中stl的vector容器的解構函式怎麼用
解構函式不需 bai要直接呼叫。而du 是在物件失效時zhi自動呼叫的。所謂物件失dao效,是指程式已經執行版出區域性變數權的作用域或者是對物件指標進行delete時。比如void foo 當此函式執行結束時,自動呼叫array的解構函式 vector c 中stl的vector容器抄的解構函式不用...