#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”了。
??? 這里記錄一下,被這個錯誤印象搞死多次了~唉~