new一个类对象和使用类名动态创建一个类对象有什么区别(c++)

参考:https://blog.csdn.net/u010355144/article/details/45457265

举个简单的例子: 

class Domo

private: int x; int y; 

public: void Set(int a,int b):x(a),y(b){}

void Print() { cout<<"("<<x<<","<<y<<")"<<endl; }

};  

void main() 

Demo p; //多个的话 Demo p[ ]

Demo *q=new Demo();//多个的话 Demo *q = new Demo[ ],删除的时候用delete [ ] q

 

p.Set(1,2); 

q->Set(4,5);//多个的话 q[i].Set(4,5) , 用了下标之后,要用. ,而不是->,下标返回的是数组那个位置里装的对象的引用

p.Print(); 

q->Print(); 

delete q;//delete的时候,自动调用析构函数,所以不是在析构函数里面delete对象。如果用指针(类的成员)申请了动态数组,则在析构函数里面delete

q = NULL;

区别:

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 、置空

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值