今天一不小心写下了类似如下的代码

class A
{
public:
    
virtual void F()=0;
    
virtual ~A(){ F()}
}
;

class B:public A
{
public:
    
virtual void F(){}
}
;

当我使用B的时候,提示我F()未定义.我就想,我明明定义啦.
于是我将A类中的F(){cout..}了一下. 发现,当析构的时候,调用的是A::F();

突然间明白了. 当析构的时候,我们是从B::~B() ----> A::~A()
当调用A::~A()的时候,B::F()函数已经从虚表中拆除. 换来的是恢复了原来的A::F();

至于编译器为何提示这个错误,则是很先进的事情. ...
Posted on 2010-08-08 00:10 暂时未使用 阅读(196) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理