#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”了。
这里记录一下,被这个错误印象搞死多次了~唉~