关于虚析构函数
刚也查了一些资料,
貌似虚析构函数的作用仅限于,定义了基类的指针指向派生类的对象。
比如 A是基类,B是派生类
A *p=new B;
如果析构函数不是虚函数那么delete的时候就只会调用A类的析构函数,
若加了virtual ,那么先调用B的析构函数,再调用A的析构函数。
从安全的角度上考虑,还是加比较好。
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=new B;
delete p;
那么virtual也就是多余的了吧
基类的指针指向派生类对象貌似都是为了实现动态绑定之类的功能吧。
貌似虚析构函数的作用仅限于,定义了基类的指针指向派生类的对象。
比如 A是基类,B是派生类
A *p=new B;
如果析构函数不是虚函数那么delete的时候就只会调用A类的析构函数,
若加了virtual ,那么先调用B的析构函数,再调用A的析构函数。
从安全的角度上考虑,还是加比较好。
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=new B;
delete p;
那么virtual也就是多余的了吧
基类的指针指向派生类对象貌似都是为了实现动态绑定之类的功能吧。
作者: huaxiangsl 发布时间: 2011-06-14
好晚了,明天再看结果吧
作者: huaxiangsl 发布时间: 2011-06-14
引用楼主 huaxiangsl 的回复:
刚也查了一些资料,
貌似虚析构函数的作用仅限于,定义了基类的指针指向派生类的对象。
比如 A是基类,B是派生类
A *p=new B;
如果析构函数不是虚函数那么delete的时候就只会调用A类的析构函数,
若加了virtual ,那么先调用B的析构函数,再调用A的析构函数。
从安全的角度上考虑,还是加比较好。
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=ne……
刚也查了一些资料,
貌似虚析构函数的作用仅限于,定义了基类的指针指向派生类的对象。
比如 A是基类,B是派生类
A *p=new B;
如果析构函数不是虚函数那么delete的时候就只会调用A类的析构函数,
若加了virtual ,那么先调用B的析构函数,再调用A的析构函数。
从安全的角度上考虑,还是加比较好。
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=ne……
你说得对。
虚函数存在的目的之一就是为了实现多态性。B *p=new B;则与多态性无关。
作者: pathuang68 发布时间: 2011-06-14
请参考:
虚析构函数问题:为什么要将基类的的析构函数设成虚的?
虚析构函数问题:为什么要将基类的的析构函数设成虚的?
作者: pathuang68 发布时间: 2011-06-14
引用楼主 huaxiangsl 的回复:
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=new B;
delete p;
那么virtual也就是多余的了吧
但是,如果没用到 基类的指针指向派生类的对象,如下
B *p=new B;
delete p;
那么virtual也就是多余的了吧
没错,但是设计类A的人,无法知道别人怎么使用。
C++中貌似没有不允许派生的关键字吧?这样的话,提供给别人的类最好都有虚析构函数。注意这个“别人”很多时候包括你自己。
作者: matrixcl 发布时间: 2011-06-14