1. 程式人生 > >沒有虛析構函數的類是危險的

沒有虛析構函數的類是危險的

art lex log 相關 com class 虛析構 delet 虛析構函數

要點10、為什麽繼承一個沒有虛析構函數的類是危險的?

  一個沒有虛析構函數的類意味著不能做為一個基類。如std::string, std::complex, 和 std::vector 都是這樣的。為什麽繼承一個沒有虛析構函數的類是危險的?當你公有繼承創建一個從基類繼承的相關類時,指向新類對象中的指針和引用實際上都指向了起源的對象。因為析構函數不是虛函數,所以當你delete一個這樣的類時,C++就不會調用析構函數鏈。舉個例子說明:
class A
{
 public:
 ~A() // 不是虛函數
 {
 // ...
 }
};
class B: public A //錯; A沒有虛析構函數
{
 public:

 ~B()
 {
 // ...
 }
};
int main()
{
 A * p = new B; //看上去是對的
 delete p; //錯,B的析構函沒有被調用
}

http://blog.csdn.net/lanbing510/article/details/4774336

沒有虛析構函數的類是危險的