Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4124
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-17 18:41
文章分类

全部博文(3)

文章存档

2013年(3)

我的朋友

分类: C/C++

2013-09-19 22:30:44

们曾经在讨论C++的时候,经常会问到:“虚函数能被声明为内联吗?”现在


,我们几乎听不到这个问题了。现在听到的是:“你不应该使print成为内联


的。声明一个虚函数为内联是错误的!”
这种说法的两个主要的原因是(1)虚函数是在运行期决议而内联是一个编译


期动作,所以,我们将虚函数声明为内联并得不到什么效果;(2)声明一个


虚函数为内联导致了函数的多分拷贝,而且我们为一个不应该在任何时候内联


的函数白白花费了存储空间。这样做很没脑子。
不过,事实并不是这样。我们先来看看第一个:许多情况下,虚拟函数都被静


态地决议了——比如在派生类虚拟函数中调用基类的虚拟函数的时候。为什么


这样做呢?封装。一个比较明显的例子就是派生类析构函数调用链。所有的虚


析构函数,除了最初触发这个析构链的虚析构函数,都被静态的决议了。如果


不将基类的虚析构函数内联,我们无法从中获利[a]。这和不内联一个虚拟析


构函数有什么不同吗?如果继承体系层次比较深并且有许多这样的类的实例要


被销毁的话,答案是肯定的。
再来看另外一个不用析构函数的例子,想象一下设计一个图书馆类。我们将


MaterialLocation作为抽象类LibraryMaterial的一个成员。将它的print成


员函数声明为一个纯虚函数,并且提供函数定义:它输出MaterialLocation



阅读(118) | 评论(0) | 转发(0) |
0

上一篇:张小海浅谈嵌入式

下一篇:我知道的SQL

给主人留下些什么吧!~~