在C++语法中,静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露。而我发现在实际工作中,一般都是动态生成对象(用NEW),动态生成有什么好处吗?我觉得在只需要静态生成,就能完成我所需要的功能呀

解决方案 »

  1.   

    动态的高效利用内存空间,操作方便,而且用时NEW,不用时delete。
    静态对象在定义时分配空间,直到出了作用域才放空间。。
      

  2.   

    静态对象不是在STACK上生成,而是在静态变量区,相当于全局变量。它的生命周期是进程的运行时间,也就是说在进程运行期间一直占用内存。动态分配的内存由程序员自己掌握。
      

  3.   

    灵活,但是需要注意memory leak.
      

  4.   

    可是书上说静态对象是在STACK上的,调用结束后,它也就自动释放了呀。怎么会像上面说的,类似于全局变量呢
      

  5.   

    对,调用new的时候分配内存,调用detele的时候释放内存。局部变量作用域结束后内存被施放。
      

  6.   

    例如,我要做一个矩阵计算器,要求用户输入行数和列数,然后由用户输入矩阵的值。由于预先你不知道矩阵地行列数,因此你不知道应该声明多少个CEdit文本框。只有用户输入了,你才能够知道。这时可以考虑使用动态创建。
    还有MFC中的三大主干类CFrameWnd,CView,CDocument都是利用文档模板在初始化的时候动态创建的,并且利用串行化实现了C++中的Persistence特性。
      

  7.   

    给个最主要的答案你吧:原因 1:
    “静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露”  不会造成内存泄露 的原理你应该清楚吧,就是因为在你的对象生存的函数退出时,对象自动析构了。但~~~~~
      如果你的对象要在多个涵数中使用,或者要在一个函数中建立,而在另一个函数中使用(COM 就是用这种方法使用对象的),那你怎么办?当然只能是用 new 的方法了。原因 2:
       函数的传址与传值的不同你应该懂吧。
       标明动态对象的是一个指针,标明静态对象的是一个值。当这个对象作为别的函数的参数时,你就知动态对象的作用了。另:
       如果你的对象是全局的,那静态,动态也一样:都是在程序退出时析构。都不用关心内存问题。而且动态对象可以在程序未退出进删除,这点要比静态对象强。你现在知道动态对象有多重要了吗?
      

  8.   

    有四种使用变量的方式
    (1)全局变量
    (2)静态变量(static)
    (3)自动变量(auto)
    (4)动态变量(new/delete)
    其中,
    (1)在任何时间,地点都可以直接使用
    (2)可以在任何时间使用,但不是任何地方都可以使用它
    (3在STACK上,生成速度很快,局部有效
    (4)的优点是可以运行时确定数量,但比较慢,容易出错.