C++ 中的new 和 java中的 new
2017-12-07 本文已影响0人
安安zoe
C++:创建实例
- new创建的类对象需要指针来接收,该类对象使用完毕后需要使用delete销毁
- new创建的对象使用heap堆空间,而直接创建的局部变量等使用栈空间
- new对象指针用途广泛,比如作为函数的返回值,函数参数等
// 方式1
Ctest *pTest = new Ctest();
delete pTest; // 使用delete 才会释放指针所指向的空间 释放时调用析构函数
// 方式2
Ctest mTest; // 使用完后,该类的析构函数负责空间释放
Java:创建实例
- 对象的引用与对象: 对象引用是一个句柄,其中包含了一对指针,一个指针指向该对象的方法表,一个指向该对象的数据
- 引用变量实际上功能类似指针,java程序不允许直接访问内存中的对象,只能通过对象的引用来操作该对象。如果堆中的对象没有任何引用变量指向该对象,那么这个对象就变成了垃圾,java GC回收机制会负责回收这部分内存,因此如果不再使用某对象,只需要将持有该对像引用的所有引用变量置为null。
A a = new A();
// [1] 为A创建一个实例,在内存中开辟了两块空间,一块空间在堆区,用于存放 new A()这个对象
// 另一块空间在栈区,用来存放a,a的值是new A()该语句得到的对象的内存地址
//(注意这个内存地址是相对JVM而言的,并不是真实在机器中的内存地址)
Object obj; // 这是声明一个引用,类型是Object,值为null,还没有指向任何对象
obj = new Object();// new语句实例化一个对象,在堆中申请了一块连续空间来存放该对象