首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

每次把析构函数定义成virtual是好还是坏?解决思路

2013-11-25 
每次把析构函数定义成virtual是好还是坏?有人说,析构函数一定要是virtual的,原因大概是你不知道将来是否要

每次把析构函数定义成virtual是好还是坏?
有人说,析构函数一定要是virtual的,原因大概是你不知道将来是否要被继承

大家说这样好不好
[解决办法]
没必要。
一般来说,只要某个类有一个虚函数或者设计为基类,就应该将析构函数定义为virtual;
但是如果只有析构函数一个虚函数而且没有设计为基类,那么一个虚函数表指针的开销,真的没必要。
[解决办法]
是的,如果可以肯定不存在三条中的某一条,那么就不需要虚析构函数。

引用:
Quote: 引用:

继承并不只为了多态,还为了代码重用和扩展性。
就算基类没有任何一个虚函数,如果delete一个动态类型为子类,静态类型为基类的指针,肯定会出现问题(通常是子类扩展部分未被析构)。
严格来讲,虚析构函数跟是否存在其它虚成员没有任何关系,只是一个编程规范问题。

满足3个条件的类A,它的析构函数才必须被声明为virtual:
1.存在子类B继承自A;
2.存在new B(或其子类)的语句;
3.存在delete一个指向A(或其基类)的指针的语句。

另外,如果某个类的基类析构函数是virtual,那么它的析构函数自动为virtual,不管是否显式声明为virtual或者非virtual。

http://www.parashift.com/c++-faq/virtual-dtors.html

你说的是语言规则,supermegaboy说的是设计的哲学,两方都没错
"modern c++"中提出的policy based design就大量利用了继承
但是却没有把dtor宣告成virtual

[解决办法]
你呀弄清析构函数定义成虚函数的原因,析构函数定义虚函数,

pParent = pDerived;

如果你delete pParent;时,希望调用的是派生类的析构函数,这样的话,你就应该把析构函数定义成虚函数

热点排行