教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 论文> 其他论文> 在C++中实现JAVA的存储管理机制

在C++中实现JAVA的存储管理机制

上传者:网友
|
翻新时间:2023-01-26

在C++中实现JAVA的存储管理机制

在C++中实现JAVA的存储管理机制 在C++中实现JAVA的存储管理机制 信息技术论文 更新:2006-4-8 阅读: 在C++中实现JAVA的存储管理机制

冯辉宁

南京大学计算机系,210093

关键词:Java、C++、存储管理、对象、指针

众所周知,JAVA语言最明显的优势在于用它设计的程序可以广泛地运行于互联网上所有安装了VM解释器的计算机上。然而,如今JAVA之所以在市场上如此流行,还得益于它的另一卖点:它提供了安全可靠和使用方便的存储管理机制。这是部分编程人员将它与其前身C++语言对比后所得出的结论。本文将针对两种语言的内存(以对象为单位)使用机制,通过从灵活性、易用性和效率三个方面的比较,来证明这样一个事实:在C++中可以实现与JAVA一样的存储管理机制。

一、JAVA对象是C++对象和指针二者的继承

JAVA作为C++的后继,在内存分配和对象使用上与之有很大的相似之处。请看下面的比较:

1

操作

JAVA

C++

指针使用

非指针使用

声明

ObjectClass Instance

ObjectClass* Instance

ObjectClass Instance

创建

Instance=new ObjectClass()

Instance=new ObjectClass()

声明时自动创建

数据访问

Instance.Data

Instance->Data

Instance.Data

方法调用

Instance.Method()

Instance->Method()

Instance.Method()

复制

指针复制

Instance1=Instance2

Instance1=Instance2

不提供

内容复制

由类自身定义

不提供

缺省,或由类自身定义

比较

指针比较

Instance1==Instance2

Instance1==Instance2

不提供

内容比较

由类自身定义

不提供

缺省,或由类自身定义

销毁

不再引用时由垃圾收集器自动销毁

delete Instance

超出作用域时自动销毁

注: ① C++的“指针使用”一列中并未列出形如*Instance的使用,因为这样做的实质不是指针使用;

②“指针复制”是指使得两个对象今后使用相同的一块内存区域,任何对此区域的修改同时会反映到这两个对象上;

③“内容复制”则指拷贝两个对象各自的存储区域,拷贝后内容相同,但各自保留自己的存储区,以后对任一者的修改不会影响另一者。

1

从上表可以看出,除了对象销毁机制以外,JAVA的对象其实是从C++中的对象和指针共同继承而来的。

但是,很多极力提倡JAVA语言的人似乎没有意识到这种关系。他们批评C++指针的概念太难被初学者接受。的确,对初学者来说,接受计算机存储器和指针的概念并不是轻而易举的事。事实上,很多程序员都经历过这样一个迷惘的阶段。但这并不意味着存在一种对存储器的解释可以完全避免“指针”这一概念——在JAVA语言中也是如此。现在有很多讲解JAVA语言的教材,但真正能够从头到尾不出现“指针”或者类似概念(不包括抨击C++语言时的使用)的,又有几本呢?

特别地,JAVA初学者由于理解的障碍,经常提出像这样的问题:“为什么像int、float这样的变量使用前不需要先用new命令来创建而对象却要呢?为什么两个对象互相复制以后,修改其中一个会影响另一个,而像int、float这样的基本数据类型却不会呢?两个值相等的对象,用==比较的结果为什么是false,它们有什么是不等呢……”面对这样的问题,即使许多对JAVA比较熟悉的人有时也说不出个所以然来。究其原因,就是JAVA中的对象从来就没有离开C++指针的影子,特别是在创建、复制(事实上,JAVA默认时只提供指针复制)和比较等最常用的操作上。因而使用它们就必须遵循指针的规则,否则将无法为计算机或编程者所理解。在C++中,指针和对象其实是与int、float共通的数据类型,但又各有其特性;继承到JAVA中以后,二者的特性互相糅合而融为一体,因此对其含义的问题就产生模棱两可的解释:JAVA对象有时是对象,有时是指针,但大多数时候是指针。

对C++指针的另一种批评指出,C++允许指针指向任意内存区域,因此容易引起系统的干扰,即使很有经验的程序员在使用时也难免产生疏忽。这种批评不无道理,因为大部分C++程序出错的原因都与指针有关。但由此而批评指针存在的价值是不对的。没有C++程序员愿意从不使用指针。指针是程序设计的一样利器,凡涉及内存的操作,没有指针不能做到的,并且它的效率比其他任何替代方法都高。这就是众多C++程序员宁愿冒着高度的出错风险也坚持使用指针的最大原因,而并不是他们无法避免使用指针。如果真正要像JAVA语言那样刻意避免指针的话,笔者在后面可以证明,只要他们愿意,在C++程序员同样可以做到,而且性能比JAVA更好。他们可以设计一类彻头彻尾的C++对象,而他们的使用方法却与JAVA对象

下载文档

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

网友最新关注

为了自己好
没有付出就没有回报
我爱你们,我的父母
出国留学
只要你健康
我对诚实的看法
一天都是地球日
我还记得那个万圣节
参观
无车日与环保
向农民致敬
男女平等
如何成为尖子生
论电话与写信
怎样与人友好相处
浅谈就业导向与高职CAD课程的教学设计
试论美国发生经济衰退的原因(1)
基于就业导向的“双证书"教育的实践与思考
试论创办特色教育,促进航空维修专业发展
关于医学院校大学生就业指导的导向错位与修复
从就业导向看职业教育发展初探
论析农村中等职教就业导向课程模式建构
浅议坚持以就业为导向 深化办学模式改革
浅谈推动高职院校跨越式发展
美国主义的成本
确立土地承包金制度的多方面意义(1)
经济转轨进程中的财政制度创新
关于高等职业教育课程模式的研究
关于粮油加工专业课程体系构建
资本共生理论及其对军工产业发展作用机理研究(1)
《匆匆》教学设计
《桂林山水》教学实录
《松鼠和松果》教学设计
《卖火柴的小女孩》的创新教案
《鸟的天堂》教学设计
《两只小狮子》阅读教学设计
《地球爷爷的手》教学设计
《詹天佑》第二课时教学设计
《翠鸟》教学设计
《静夜思》教学谈
《比尾巴》教学设计
《给予是快乐的》教学设计
《詹天佑》课堂教学片段实录和点评
《一夜的工作》说课设计
《草原》教学设计