关于virtual..
今天看一本书上说:作为一条经验,要把所有的方法都用virtual声明(包括析构函数,不包括构造函数),来避免因遗漏关键字virtual而产生的相关的问题。
这样全部用virtual声明有什么影响?比如对性能什么的。。。。。
[解决办法]
增大了开销,由于要查找虚表,减小了执行速度。
[解决办法]
class Base{ virtual void f()=0;};class Derived:public Base{ /*virtual*/void f(){...};};
[解决办法]
特性的好坏完全看使用者。
在需要使用类似Init的时候如果你去virtual反而容易出乱子。
不过如果析构不用virtual,乱子更大。
坏处就是1L说的,增加了开销,因为使用virtual意味着一个virtual function table的形成,这张表本身就是一些函数指针,消耗还好,但是每次访问virtual函数都会多一次的指针跳转,因为需要在vft中进行查找,再跳转。(一般编译器优化后也就多一次跳转,查找都省掉了。)慢也就慢那一下,如果这个消耗你觉得吃不消,那还是用纯C好了。
好处的话就很多了,正因为它的存在,才使得C++可以面向对象。C实现C++无非就是自己来走这一步而已。
[解决办法]