我刚刚上了关于虚拟析构函数的课,我有一个问题。
假设我们有下面的代码:
#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并删除它吗?
所有类都有一个析构函数。如果你没有显式编写一个,那么编译器将隐式生成它。因此,您询问的“如果我没有析构函数”的情况不存在。
整个计划还会像以前一样运作吗?
它会工作,但方式不完全相同,因为隐式生成的析构函数不会打印析构函数打印的字符串。