笔记

      C++ 2008-10-15 10:55

  a为基类,b为a的派生类。当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。实际运行时经常发生的是,派生类的析构函数永远不会被调用。即若 a*   pa;    pa=new   b;  delete   pa; /*我知道析钩函数一定要声明为虚的,只有这样,在delete   pa以后,才能按正确的顺序依次调用。派生类的析构和基类的析构来释后内存自由存储区,但我不明白的是为什么不虚,就会只调用一 次基类的析构函数,而不是派生类的析构函数。*/  

如果函数不是   virtual   的,则进行的是静态绑定,即在编译期间就决定了其调用的函数。  对于上面的程序来说,   delete   pa;,即使基类指针   pa   实际上指向的是派生类对象,但是编译器也会把这个基类指针和指向类型(基类)的析构函数进行静态绑定,从而达不到调用派生类析构函数的目的。

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}