提问者:小点点

虚拟析构函数,会发生什么情况,我在派生类中没有析构函数?


我刚刚上了关于虚拟析构函数的课,我有一个问题。

假设我们有下面的代码:

#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;
}

我们看到基类中有一个虚拟析构函数,这意味着当我们在主类中删除d时,基类析构函数和派生类析构函数都将被调用。。

**但是如果我们在派生类中没有析构函数,并且我们仍然想要有我们仍然想要删除d的虚拟析构函数怎么办?然后会发生什么?派生类会自动“创建”析构函数吗?析构函数会处理resSource-d并删除它吗?


共1个答案

匿名用户

所有类都有一个析构函数。如果你没有显式编写一个,那么编译器将隐式生成它。因此,您询问的“如果我没有析构函数”的情况不存在。

整个计划还会像以前一样运作吗?

它会工作,但方式不完全相同,因为隐式生成的析构函数不会打印析构函数打印的字符串。