1——
在构造上的区别:常规变量定义不使用new,定义的对象在定义后就自动可以使用,指针变量定义必须使用new进行对象实例的构造。
2——
使用上的区别:使用new的是一个指针对象,此时对对象成员的访问需要使用指针操作符“->”,而不使用new的是常规对象,使用普通成员操作符“.”。
3——
内存与安全:
指针变量必须显式的调用析构函数,而且很容易错误操作,因为C里的指针太灵活了。
4——
常规变量定义一般只能在有限的范围使用,而指针变量的作用范围要宽广很多。
在开发中new对象有什么必要性吗??
能具体说下吗?谢谢
@为梦奔跑: new对象的寻址更灵活点而已,在一般开发里,常规定义与指针定义的区别不是很大。一般都是建议能不使用指针对象的时候不要使用。
另外,非new生成的对象也可以通过取地址的方式把对象赋值给一个指针变量,此时,则千万别对指针进行析构(delete),事实上也析构不了(会有运行错误,因为对象本身是非new构造的)。
new操作使用最多的地方是强制分配内存块。具体的情况还是要根据实际情况来考虑。我不用C/C++已经多年了,很多也都丢光了。
如果在函数中直接定义一个类的对象则是在堆上分配空间,函数调用结束之后,对象即被销毁;而如果new一个对象则是在堆上分配空间,此时如果不需要了需要手动delete掉内存空间,否则会造成内存泄漏...
居然没看懂 lz 问的是什么意思,什么叫new和不new。汗。!
你的前半句写错一个字,“堆”应该为“栈”。
A a; 这个是a构造在栈上空间。离开函数自动析构。
A* pA = new A(); 这个是构造在堆上,不需要的时候必须主动调用delete pA;
new出来的对象是在堆上分配的内存,在函数体内显示定义的对象是在函数栈里面分配的内存。两者最大的区别在于前者存在与堆中,不会随着函数的返回而被销毁,而后者当函数返回的时候会自动清空函数栈里的对象,并自动调用析构函数。