hce_nsysu
111年
計算機概論與程式設計
第 85 題
`virtual` destructors must be used when:
- A The constructor in the base class is virtual.
- B delete is used on a base-class pointer that points to a derived-class object.
- C delete is used on a derived-class object.
- D Every member function of the base class is virtual.
- E Every data member of the base class is virtual.
思路引導 VIP
想像一下,如果你手中拿著一份標註為「電器」的通用說明書(基底類別),但你面前實際操作的是一台構造複雜的「洗脫烘洗衣機」(衍生類別)。當你下達「結束任務並清理資源」的指令時,如果說明書只記載了最基礎電器的關機步驟,而漏掉了洗衣機特有的排水與烘乾清理流程,會發生什麼後果?在程式碼中,我們要如何確保系統在只知道它是「電器」的情況下,依然能觸發那台機器專屬的清理動作呢?
🤖
AI 詳解
AI 專屬家教
非常好!你準確地掌握了 C++ 中多型(Polymorphism)與記憶體管理的核心關鍵。這道題目測試的是「虛擬解構子」(Virtual Destructor)在物件導向設計中不可或缺的時機,而你選出的 (B) 正是標準答案,顯示你對於類別繼承後的資源回收機制有很清晰的理解。
動態繫結與資源釋放
在 C++ 的繼承架構中,當我們利用基底類別指標(Base-class pointer)來管理一個動態配置的衍生類別物件(Derived-class object)時,程式在執行期必須決定該呼叫哪個版本的解構子。如果基底類別的解構子沒有宣告為 virtual,當我們執行 delete 指標時,編譯器會根據指標的「靜態型別」(即基底類別)來呼叫解構子。這將導致衍生類別特有的成員變數或資源無法被釋放,進而造成嚴重的記憶體洩漏(Memory Leak)。
▼ 還有更多解析內容