C++中建立类的对象有两种方式:
(1)静态建立,例如 A a;
静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。
(2)动态建立,例如 A* p = new A();
动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并进行分配;第二步调用类的构造函数构造对象。这种方法是间接调用类的构造函数。
在C++语法中,静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露。而我发现在实际工作中,一般都是动态生成对象(用NEW),动态生成有什么好处吗?
原因 1:
“静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露”
不会造成内存泄露 的原理你应该清楚吧,就是因为在你的对象生存的函数退出时,对象自动析构了。但~~~~~
如果你的对象要在多个涵数中使用,或者要在一个函数中建立,而在另一个函数中使用(COM 就是用这种方法使用对象的),那你怎么办?当然只能是用 new 的方法了。
原因 2:
函数的传址与传值的不同你应该懂吧。
标明动态对象的是一个指针,标明静态对象的是一个值。当这个对象作为别的函数的参数时,你就知动态对象的作用了。
另:
如果你的对象是全局的,那静态,动态也一样:都是在程序退出时析构。都不用关心内存问题。而且动态对象可以在程序未退出进删除,这点要比静态对象强。
参考讨论:http://bbs.csdn.net/topics/20114330