何时使用虚拟析构函数?
我对大多数面向对象理论有扎实的了解,但令我困惑的一件事是虚拟析构函数。 我以为无论链中的每个对象是什么,析构函数总是被调用。 您打算何时将它们虚拟化?为什么? #1楼 我喜欢考虑接口和接口的实现。 在C ++中,接口是纯虚拟类。 析构函数是接口的一部分,有望实现。 因此,析构函数应该是纯虚拟的。 构造函数呢? 构造函数实际上不是接口的一部分,因为对象总是显式实例化的。 #2楼 虚拟构造函数是不可能的,但虚拟析构函数是可能的。 让我们尝试一下... #include <iostream> using namespace std; class Base { public: Base(){ cout << "Base Constructor Called\n"; } ~Base(){ cout << "Base Destructor called\n"; } }; class Derived1: public Base { public: Derived1(){ cout << "Derived constructor called\n"; } ~Derived1(){ cout << "Derived destructor called\n"; } }; int main() { Base *b = new Derived1(); delete b; } 上面的代码输出以下内容: