c++ virtual destructor 和 virtual function的关系。。

关于virtual function的作用我就不再赘述了。总之,就是让子类可以重新定义一个和基类同名的函数,并且不用考虑会把基类的覆盖掉。


我原先以为 virtual destructor根virtual function一样,就是如果你不加virtual的话,那么derived class中的destructor就会把base class给覆盖了,结果发现,你不加virtual的话,根本就看不到derived class的destructor

考虑下面代码:

#include iostream.h
class Base
{
   	public:
      	Base(){ cout<<"Constructing Base";}
      	
     // this is a destructor:
	
	~Base(){ cout<<"Destroying Base";}
};

class Derive: public Base
{
        public:
       	Derive(){ cout<<"Constructing Derive";}
       	
       	~Derive(){ cout<<"Destroying Derive";}
 };

void main()
{
    	Base *basePtr = new Derive();
        
        delete basePtr;
}
输出结果是:

Constructing Base  
Constructing Derive 
Destroying Base

坑爹啊,derived class根本就看不到自己的destructor,这个跟普通虚函数是反着的。普通虚函数是如果你不加virtual,那我的派生类的同名函数就把基类的给覆盖了。但是destructor是只看得到祖宗的,看不到自己的

我发现真是越复习越发现自己原先理解的不对。其实这个跟普通virtual function不冲突,因为basePtr是一个基类的指针,所以按理说他只能看到自己类里的成员函数,所以如果你不加virtual的话,那只能看到基类的destructor,从而无法访问derived class的destructor。所以要有virtual destructor。 这样基类指针就能看到derived class的destructor


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值