zoukankan      html  css  js  c++  java
  • 详解 C++ virtual 析构函数

    详解 C++ virtual 析构函数

    http://blog.csdn.net/lwbeyond/article/details/7497294

    第一种情况:基类指针指向派生类对象。

    [cpp] view plain copy
     
    1. #include <iostream>  
    2. using namespace std;  
    3.    
    4. class Base{  
    5.   public:  
    6.     ~Base() {cout<<"~B"<<endl;}  
    7. };  
    8.    
    9. class Derived:public Base{  
    10.   public:  
    11.     ~Derived() {cout<<"~D"<<endl;}  
    12. };  
    13.    
    14. int main (){  
    15.   Base *b = new Derived; //注意这里  
    16.   delete b;  
    17. }  

    这里只有基类(Base)会被析构掉,派生类(Derived)没有被析构。

    第二种情况:派生类指针指向派生类对象。

    [cpp] view plain copy
     
    1. #include <iostream>  
    2. using namespace std;  
    3.    
    4. class Base{  
    5.   public:  
    6.     ~Base() {cout<<"~B"<<endl;}  
    7. };  
    8.    
    9. class Derived:public Base{  
    10.   public:  
    11.     ~Derived() {cout<<"~D"<<endl;}  
    12. };  
    13.    
    14. int main (){  
    15.   Derived *d = new Derived; //注意这里  
    16.   delete d;  
    17. }  

    这次基类和派生类都能被析构掉。

    第三种情况:基类指针指向派生类对象,但析构函数是virtual 的。

    [cpp] view plain copy
     
    1. class Base{   
    2. public:  
    3.   virtual ~Base(){cout<<"~B"<<endl;};   
    4. }   
    5.   
    6. class Derived:public Base{   
    7. public:  
    8.   virtual ~Derived(){cout<<"~D"<<endl;};   
    9. }   
    10.   
    11. void main (){   
    12.   Base *b=new Derived();  
    13.   delete b;   
    14. }   

    这时,基类和派生类对象都能被析构掉。

  • 相关阅读:
    作为另一个函数的值(读书摘)
    算法-二分查找与二叉排序树
    算法-图
    算法-二叉树
    算法-分治
    算法-回溯
    算法-动态规划
    算法-贪心
    算法-堆
    算法-栈,队列
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/5259221.html
Copyright © 2011-2022 走看看