c++的类中,声明一个对象好还是用指针申请一块空间好?51
发布网友
发布时间:2023-11-24 06:48
我来回答
共2个回答
热心网友
时间:2024-11-29 23:50
你提的问题很好,这个就是c++和java之间的区别,c++函数可以不写在类里面,这样就产生了全局变量定义,文件#include等,在java中,A a = new A()
c++中等同于 A a;
另外在c++中还有另外一中声明和实例化就是使用指针,如:A* a= new A()
c++中的A a;就已经构造了对象;
而在java中 A a; 就是声明,还没有分配空间,在c++中就非常的灵活,
A a;在栈(stack)上分配空间,A * a= new A;在堆(heap)上分配空间
栈上空间自动回收,堆空间需要程序员手动回收
热心网友
时间:2024-11-29 23:50
这个本质上是对象分配区域的问题,前者是在栈(stack)上分配空间,后者是在堆(heap)上分配空间。
栈上分配空间的好处是快,而且对象生存期是自动的,离开当前域之后就自动析构回收。坏处就是栈空间有限,而且不能人为控制对象的生存期,比如你无法将一个函数内部的栈上的对象返回,因为这个函数执行完毕后栈空间会自动回收。
堆上分配空间就相反,new一个空间出来是很慢的,而且对堆上对象的访问也稍慢于栈上。一旦new一个空间出来,需要自己手动去delete回收,系统不会帮你管理回收(用GC的除外),但是分配空间大小灵活,而且正因为是手动回收的,你可以自由控制对象生存期,常用来跨域传递对象。