簡體   English   中英

虛擬析構函數,我在派生的 class 中沒有析構函數會怎樣?

[英]Virtual destructor, what would happen I didnt have a destructor in the derived class?

我剛剛上過關於虛擬析構函數的課程,我有一個問題。

假設我們有以下代碼:

#include <iostream>

class Base {
public:
    virtual void fun() { std::cout << "Base Fun" << std::endl; };
    virtual ~Base() { std::cout << "Base Destructor called" << std::endl; };
};

class Derived : public Base {
public:
    virtual void fun() { std::cout << "Derived Fun" << std::endl; };
    ~Derived() { std::cout << "Derived Destructor called" << std::endl; };
};

int main() 
{
    Base* b = new Base();
    Base* d = new Derived();

    b->fun();
    d->fun();

    delete b;
    delete d;

    return 0;
}

我們看到我們的 Base 類中有一個 Virtual 析構函數,這意味着當我們在 main 中刪除 d 時,Base class 析構函數將被調用,Derived class 析構函數將被調用。

**但是如果我們在派生的 class 中沒有析構函數,我們仍然想要虛擬析構函數 + 我們仍然想要刪除 d。 那會發生什么? 派生的 class 是否會自動“創建”析構函數,然后析構函數會處理 ressource -d 並刪除它嗎?

所有類都有一個析構函數。 如果你不明確地寫一個,那么編譯器會隱式地生成它。 因此,您詢問“如果我沒有析構函數”的情況不存在。

整個程序還會像以前一樣工作嗎?

它可以工作,但方式不完全相同,因為隱式生成的析構函數不會打印析構函數打印的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM