在Java中和C++中实例化一个类和定义一个引用的区别?

2024-12-20 03:09:48
推荐回答(2个)
回答1:

是的,在C++中
A a;代表创建一个A类型的对象a,此时已经调用缺省构造函数进行了构造
如果不想创建A的对象,只能创建一个指针A* pa;
A &ra是创建A的一个引用,注意,在声明引用的时候必须同时指定该引用指向的对象,即必须这么写:
A &ra = a;
此时ra更类似java里的句柄(也就是java里的A a = new A();里的a),引用只是一个别名而已(它的主要用途其实在于参数传值时使用)

回答2:

JAVA:
A a = new A();
为A对象创建了一个实例,但在内存中开辟了两块空间:一块空间在堆区,存放new A()这个对象;另一块空间在堆栈,也就是栈,存放a,a的值为new A()这个对象的内存地址。因为java在JVM中运行,所以a 描述的内存地址不一定是这个对象真实内存的地址。
Object o; // 这是声明一个引用,它的类型是Object,他的值为null,还没有指向任何对象,该引用放在内存的栈区域中。
o = new Object(); // new Object()句,实例化了一个对象,就是在堆中申请了一块连续空间用来存放该对象。
= // 运算符,将引向o指向了对象。也就是说将栈中表示引用o的内存地址的内容改写成了Object对象在堆中的地址。

C++:
C++ 如果直接定义类,如classA a; a 存在栈上(也意味着复制了对象a在栈中),如果classA a = new classA就存在堆中。