使用虚函数节省内存

来源:互联网 发布:不是网络常用诈骗手段 编辑:程序博客网 时间:2024/05/02 01:19

 

在一个类层次中,如果最顶层基类需要定义某个属性,最一般的方法就是在顶层的类中定义

一个数据成员来存储该属性的值,然后在顶层基类中定义一个非虚方法访问该属性的值。

但是如果对象的数量非常多时,这种方式会造成一定的内存开销。

 

有一种特殊的情况:一个对象的某个属性的值完全由其所属的类决定。在这种情况下,可以

在顶层基类定义一个虚方法,然后在某些子类中覆盖该方法。在这些虚方法中都根据所在

的类返回相应的常值。

 

例如在WebKit的DOM类层次中,有Node,ContainerNode,Element,Document等各种类,Node类有一个属性,

即该Node对象是否是Element。这时可以在Node中定义一个返回false的virtual method,

然后在Element中override该方法,并返回true。

 

 

这种方法的缺点是访问速度慢,无法内联。不过如果这个属性的访问次数很少,该方法还是很有价值的。