Why destruct function should always virtual

举个例子,考虑下面一段程序:

 1 class base
 2 {
 3 public:
 4     ~base()    { cout<<"in base destruct function!\n"; }
 5 };
 6 
 7 class derived: public base
 8 {
 9 public:
10     ~derived() {cout<<"in derived destruct function!\n"; }
11 };
12 int main()
13 {
14     base *pBase = (base *)new derived();
15     delete pBase;
16 }

 

输出结果:in base destruct function!

pBase指向derived类型对象,delete时只调用了父类的析构函数,这是不正确的做法。

而把析构函数定义为virtual的,就不会存在这个问题,输出结果为

in derived destruct function! 

 in base destruct function!

delete该对象时会先调用子类析构函数再调用父类析构函数。 


posted @ 2010-06-28 22:25  icecryed  阅读(176)  评论(0)    收藏  举报