原链接https://www.it610.com/article/1294982757092499456.htm
区别:
1.存储空间上不同。 new出来的在堆上 ,直接定义的在栈上
2.栈上分配的在函数结束后会自己释放,堆上的要自己手工释放。
要考虑实际情况
3.c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过
如: int Array[5];正确
int i=5;
int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少
因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间
这样,下面的语句:
int size=50;
int *p=new int[size]; 是正确的
IF: 如果对象本身很小,或者没有特殊的必要,还是要放在栈上,这样有2个好处:
1 效率高
2 在堆上创建对象容易引起内存碎片
ELSE :
使用new在堆上分配,给程序员留下了很大的自由度,这可能是高手的代码中使用new比较多的原因
使用new需要更多的控制管理,由此带来了程序的高效和运行的更加健壮
c语言的精华就是指针运算管理,使用new是产生一个自由使用的指针对象的好办法
使用new的其它好处:
1、需要的时候才new(在复杂权限和业务逻辑系统中很重要)
2、对象可靠性检查(没有栈空间的限制问题)
3、对象的适度留用控制
动态申请不一定会成功(内存不够),一般申请多个对象空间或数组空间时
if(p == NULL)
{
return -1;
}
类有对象成员时(成员类型是另一个类),一般用指针,然后new实例化,然后用->,和普通类型一样
一般成员是指针的时候,都要在构造函数里new出来。new出一个或者一组。然后在析构函数里delete 、置空。