C++使用virtual解構函式的原因
1.如果基類中的成員函式是virtual型別的,其繼承類中相應的函式也是virtual型別,並且基類物件的引用指向繼承類物件時,
基類就可以呼叫繼承類函式,否則呼叫的是基類函式
//或者base *b = &der;
|
2.virtual解構函式有什麼用? 如
base * get()
{
derived * p = new derived;
return p;
}
這樣base類就可以呼叫子類函式,最後要釋放new出來的記憶體
base *ba = get();
delete ba;
因為base類的解構函式不是virtual型別的,所以delete ba這一邊中只能呼叫基類的解構函式,無法呼叫子類的解構函式,
這可能導致子類記憶體無法釋放完畢
所以在基類中的解構函式定義為virtual型別,這樣delete ba時就可以呼叫子類的解構函式
3.關於虛擬函式表的詳細介紹,看連結 http://blog.csdn.net/haoel/article/details/1948051
virtual void fun2(){ cout << "base fun2" << endl;}
|