class A { public: A() { printf("A() "); } virtual ~A() { printf("~A() "); } }; class B { public: B() { printf("B() "); } ~B() { printf("~B() "); } }; class C:public A, public B //继承用“,”隔开每个类前面必须有public否则默认为private { public: C() { printf("C() "); } ~C() { printf("~C() "); } }; 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; }