父类析构函数加virtual

转载 2016年08月29日 11:00:26
  1. #include<iostream>  
  2. using namespace std;  
  3. class Base  
  4. {  
  5. public:  
  6.     Base(){}  
  7.     virtual ~Base(){}  //基类的析构函数应该声明为虚析构函数。  
  8.     virtual void  Test(){cout<<"Base Test"<<endl;}  
  9. };  
  10. class Derived:public Base  
  11. {  
  12. public:  
  13.     Derived(){}  
  14.     ~Derived(){cout<<"delete Derived"<<endl;}  
  15.     void Test(){cout<<"Derived Test"<<endl;}  
  16. };  
  17. void main()  
  18. {   
  19.     Base* pBase=new Derived();  //父类的指针指向派生类的对象。  
  20.     pBase->Test();  
  21.     delete pBase; //<span style="color:#ff0000;">如果没有Base基类的析构函数没有声明为virtual,是不会执行到子类的析构函数的。</span>  
  22.                   //所以将父类的析构函数声明为虚函数,作用是用父类的指针删除一个派生类对象时,派生类对象的析构函数会被调用。  
  23. }  
将父类的析构函数声明为virtual是为了删除父类指针时可以调用到子类的析构函数。

为什么要把父类的析构函数设置为virtual

如果我们想通过基类的指针去释放子类的对象(这里必须是new出来的对象),就需要基类将基类的虚函数设置为virtual,看下面的例子: #include using namespace std; ...

《Effective C++》item7:为多态基类声明virtual析构函数

(1)为什么要用虚函数? (2)为什么要定义virtual析构函数? (3)什么时候该定义virtual析构函数和什么时候不该定义virtual析构函数?...

为多态基类声明virtual析构函数吧

在《C++ primer》,以及在Meyers的《Effective C++》《More Effective C++》中都提到过virtual析构函数,在这里做一下总结。 class Bas...

(原文)Effective C++条款7:为多态基类声明VIRTUAL析构函数

今天碰到一个bug,查了半天发现是某位虚基类没有定义虚析构函数,delete时导致派生类没有正确释放资源,遂从网上搜到一篇文章,留个记号 关于virtual desctructor的详细讨论。同样来...

Item 7 (多态中基类的虚析构函数)Declare destructors virtual in polymorphic base classes

看评注版的书的确有点吃力,作为一个英语渣,很多单词都要请教谷歌娘。但是细细的看下去,虽然看上去是个简单的问题,但作者想到的东西却如此之多,还是收获良多的。     先把书上最后的总结心得Mark下,再...

为多态基类声明virtual析构函数

这个问题在实践中偶尔会碰到,设计一个TimeKeeper基类和一些派生类来记录时间: class TimeKeeper {   public:    TimeKeeper();    ~Tim...

为多态基类声明virtual析构函数

1、polymorphic(带多态性质的)基类应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。2、Calsses的设计目的不是作为...

条款07:为多态基类声明virtual析构函数

今天看了《Effective C++》中关于virtual的用法,感觉在平时的使用中还是要注意一下,所以写一些东西把它记录下来。这里写的会比较简单,如果想有更深的了解推荐看原著。...

条款:07 为多态基类声明virtual析构函数

Effective C++中说过: 1、带有多态性质的base class应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数; 2、C...

关于基类的析构函数应不应该为virtual

如果该基类要派生其它类,则一定要 virtual 基类 Coperation 的析构函数没加 virtual 时程序运行结果 可以看到加运算类没有被析构。为什么因为工厂类的成员类型为基类指...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:父类析构函数加virtual
举报原因:
原因补充:

(最多只允许输入30个字)