Codejie's C++ Space

Using C++

记录:析构函数中的虚函数问题

#include  < iostream >

class  CTopClass
{
public :
    CTopClass() {}
    
virtual   ~ CTopClass()
    {
        VirtualRelease();
    }
    
    
virtual   void  VirtualRelease()
    {
        std::cout 
<<   " Top "   <<  std::endl;
    }
};

class  CSubClass :  public  CTopClass
{
public :
    CSubClass() {}
    
virtual   ~ CSubClass() {}
    
    
virtual   void  VirtualRelease()
    {
        std::cout 
<<   " Sub "   <<  std::endl;
    }
};

void  Test()
{
    CSubClass sub;
}

int  main()
{
    Test();
    
return   0 ;
}
    上面的代码会输出什么?是“sub”吗?答案是no。
     本来我以为VirtualRelease是虚函数了,在释放时,应该会调用到真正实例化的CSubClass的VirtualRelease,然而,我错了,输出是“top”,和CSubClass么关系。而我的需求是析构是调用Sub和Top的VirtualRelease,因此对CSubClass的析构函数需要作如下修改:
class CSubClass : public CTopClass
{
public:
    CSubClass() {}
    
virtual ~CSubClass()
    {
        VirtualRelease();
    }
    
    
virtual void VirtualRelease()
    {
        std::cout 
<< "Sub" << std::endl;
    }
};
    这样修改下,输出就是“sub top”了。

    这里记录一下,被这个错误印象搞死多次了~唉~

posted on 2009-05-19 00:10 codejie 阅读(210) 评论(0)  编辑 收藏 引用 所属分类: C++随笔而已


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜