第一种,析构没有写成虚函数,看看会怎样:
class A { public: A() { cout << "con in A" << endl; } ~A() { cout << "~A" << endl; } }; class B :public A { public: B() { cout << "B()" << endl; } ~B() { cout << "~B()" << endl; } }; void f() { A* p = new B; delete p; }
执行结果,在delete p的时候,只调用了A的析构函数。没有调用B的析构函数。

下面修改成虚函数,就正常了。
class A { public: A() { cout << "con in A" << endl; } virtual ~A() { cout << "~A" << endl; } }; class B :public A { public: B() { cout << "B()" << endl; } ~B() { cout << "~B()" << endl; } }; void f() { A* p = new B; delete p; }

浙公网安备 33010602011771号