Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1547516
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: Android平台

2015-01-07 22:25:06


首先说明一下C++中,new返回的是指针,而java中返回的是引用,所谓的引用就是类的一个别名

假设有个类Test
在C++中你执行了Test *t=new Test();电脑实际上是分成好几步完成的
首先 要在堆中申请类的内存(new 运算符实际是调用malloc函数来分配内存的,调用new之前会把类的大小当作参数传入)
2,申请完内存后,把类在堆中的地址 存入寄存器EAX中。(一般是EAX存放返回值,不同编译器可能不同的)。
3,然后把EAX中存放的地址放到变量 t 中。这样类在内存的模型就创建好了。
4,调用构造函数,对在堆中创建的内存模型进行初始化,虚函数表的初始化等操作。这样一个对象就创建好了。

概括来说你一个new X();语句实际的效果就是先申请了内存,然后调用构造函数对申请了的内存进行初始化。这两步操作返回值都是类在内存中的地址,通过寄存器EAX返回给调用者。

而java中Test te=new Test();基本操作流程和C++差不多,只是这里的te是一个别名。
阅读(744) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~