现在的位置: 首页 > 综合 > 正文

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

2013年02月02日 ⁄ 综合 ⁄ 共 857字 ⁄ 字号 评论关闭

在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的区别。

抱歉!评论已关闭.