首先说明一下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是一个别名。