答案:++语言已成为面向对象程序设计的主流语言。据保守的估计,C++的用户数在1992年已达
到150万个,大体上每7.5个月增加一倍。
虽然,C++得到了广泛的应用,但是它的持久性对象和易失性对象之间,却存在着比C语言
更为严重的语义断层,这已成为C++软件开发中的一个严重障碍。
所谓持久性对象,是指其生存周期超过程序运行时间的对象,例如,存放在文件中的一个
双向链表对象。所谓易失性对象,是指其生存周期随程序运行结束而结束的对象。所谓的语
义断层(semantic gap)是指程序中易失数据对象与其在持久性存储(如文件)中表现形式之
间的差异。例如,当存储一个双向链表时,一般是先统计结点的个数,存入文件,然后再将各
结点"拆卸"下来,转换格式,依次存入文件;使用时则要把各元素从文件中取出,转换格式,"
组装",然后在内存中重构出来。在数据密集的复杂的应用领域(如CAD、CAM等),这种转换代
码可占到整个代码量的30%。
造成C++持久性对象和易失性对象语义断层的主要原因来自两个方面:其一,文件系统不
直接支持C++对象指针的引用语义(当然C也是如此),例如:struct Student中有一个指向st
ruct Teacher的指针*pt,当存储Student时,pt必须以逻辑地址的方式来存储 ;其二,C++对
象中有隐含指针(hidden pointer),这些指针是C++编译器为实现其面向对象特征,在编译过
程中加入的,对C++程序员是不可见的,C++程序员甚至不知道它的存在。这些隐含指针实际
是虚拟函数表(virtual function tables)和指向虚基类的指针(vptr)。而对于C程序员而
言,机器内存、数据结构、函数地址等等均是"易做图"的和可操作的。C++程序员却没有这个
福气。
看得见的指针,好歹我们用土办法还能处理,看不见的,就得费些事,因为这些指针是指
向程序运行空间的指针,一旦存入文件就不具有了程序运行时的语义。
由以上两个原因可以看出,解决问题的关键在于如何为持久性对象和易失性对象提供一
个统一的存储空间,同时保证持久性对象的指针和隐含指针的合法性。由于篇幅的限制,本
文仅局限于对象隐含指针在存储过程中的合法性维护。
矢都写错了
悲哀
再好好学习一下C++就行了
上一个:C++中的^>和^的问题
下一个:C++语言中 operator<<()怎么用