C++ 为什么要virtual析构函数
class A { public: A() { printf("A()\n"); } virtual ~A() { printf("~A()\n"); } }; class B { public: B() { printf("B()\n"); } ~B() { printf("~B()\n"); } }; class C:public A, public B //继承用“,”隔开每个类前面必须有public否则默认为private { public: C() { printf("C()\n"); } ~C() { printf("~C()\n"); } }; int _tmain(int argc, _TCHAR* argv[]) { { C c; //可以正确构造和析构 } { A *a = new C; delete a;//有virtual会一次调用C,A,B的析构函数,正确执行 } { B *b = new C; delete b;//没有virtual会直接调用B的析构,不会调用A,C的析构函数错误 } getchar(); return 0; }