1. 程式人生 > >解構函式定義為虛擬函式的好處

解構函式定義為虛擬函式的好處

在C++中有這麼一句話描述虛解構函式:
當通過基類的指標去刪除派生類的物件,而基類又沒有虛解構函式時,結果將是不可確定的。
糾結了半天看文字還是有一些不確定和不明白,在網上搜集了一點資料與大家共勉。

解構函式是釋放資源,避免“資源洩漏”,更加安全。
對於基類和派生類的物件刪除問題,虛解構函式則能夠保證物件釋放時總是呼叫“物件自己的函式”。

舉個例子就清楚了,比如:
  1. Class A
  2. {
  3. ……
  4.    Virtual ~A(){
  5.       printf(“A::~A()”);
  6.     }
  7.   ……
  8. }
  9. Class B:public A
  10. {
  11. ……
  12.    Virtual ~B(){
  13.      printf(“B::~B()”);
  14.    }
  15.   ……
  16. }
  17. Void main()
  18. {
  19. B *b = new B();
  20. A *a = a;
  21. Delete a;
  22. }
  23. 上面的代買的執行結果是B::~B()

但是如果類A的西溝函式是非虛擬函式的話:

上面的程式碼的執行結果將是A::~A()

很明顯解構函式定義為虛擬函式的作用是為了程式能夠呼叫到正確的解構函式。