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