用new创建类对象与不new区别

在C#和Java中,在使用对象的时候一般都是通过New,我们知道通过new关键字实际上是在heap(堆中)开辟了一块内存,而等号右边的这个对象实际上就是一个内存地址,不信的话,可以打印出来看看。其实并不仅仅这么简单。堆上分配的是不定大小的对象,大小不固定,而基本数据类型(int,short)什么的都在栈上,栈上对象的大小是固定的,堆上对象的引用也在栈上,如果堆上的对象在栈(stack)上没有了引用,它就被GC回收了。在学OO开发的时候,老师一般都会苦口婆心的让我们记住这些,这些也算是OO开发的基础吧。

在C++的时候,跟这个不太一样,我们知道C++不是完全的面向对象的,在C++中,对象和对象指针都会用到,但是两者区别蛮大的。

C++中,使用new创建类对象需要指针接收,也就是对象指针,这种对象,当使用new的时候会在heap中开辟内存空间,然后将内存地址返回给对象指针变量,new了之后的对象,在不用的时候,一定要delete,也就是手动释放,否则在程序退出的时候会有内存泄露。

  • new创建类对象需要指针接收,一处初始化,多处使用
  • new创建类对象使用完需delete销毁
  • new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
  • new对象指针用途广泛,比如作为函数返回值、函数参数等

而如果直接声明类的变量,如:

CTest mTest;

此种创建方式,对象是被创建在栈上的,使用完后不需要手动释放,该类析构函数会自动执行。

总结:

 

  • new创建类对象需要指针接收,一处初始化,多处使用
  • new创建类对象使用完需delete销毁
  • new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
  • new对象指针用途广泛,比如作为函数返回值、函数参数等
  • 频繁调用场合并不适合new,就像new申请和释放内存一样

 

最后推荐一篇博客:http://www.cnblogs.com/hellope/archive/2011/08/03/2126371.html,博客中用图的方式说明了局部变量使用new和不使用new的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值