如下:
CMY my;/*in stack*/
CMY* my=new CMY();/*in heap*/
这两种构造对象的方法有什么区别吗?(除了指针方面)谢谢

解决方案 »

  1.   

    CMY my;/*in stack*/
    CMY* my=new CMY();/*in heap*/
    //对于存储结构来说第一个为在栈中分配空间
    //第二个为在堆内分配空间
      

  2.   

    两种都是调用无参的构造;
    不过其实new是两部,第一步是分配sizeof(class)返回指针,第二步是在指针所指的地址开始构造。还有new在无参的时候也可以不用括号。
      

  3.   

    第一个为在栈中分配空间,变量退出作用域时自动删除
    第二个为在堆内分配空间,变量退出作用域时需手动用delete删除
      

  4.   

    第二个不进栈,要自己delete,至于构造函数的调用是一样拉
      

  5.   

    那么这两个在具体做程序的时候有什么差别呢?
    destructor调用时间的不同,产生什么影响?
    是否有些特定的地方要必须用其中的那一个?
      

  6.   

    如果你想要在你的函数体以外的地方使用一个类的实例,就需要用到new,如果只是在本函数中使用(直接定义的变量的生命周期为{}),则直接定义就可以了。
      

  7.   

    new
    分配的可以用delete释放所分配的空间,但会遗留下一个指针,
    指针并没有被摧毁,有成为野指针的危险,那就要看你的程序
    有没有涉及到再用这个指针的危险性了
    另外一个要待函数结束才会释放
      

  8.   

    那既然NEW分配以后会有成为野指针的危险,为什么还要用?
      

  9.   

    哪位高手可以详细地讲一下“stack”和“heap”的区别呢?
      

  10.   

    当你在一个函数体没有结束的时候可以直接释放new分配的空间
      

  11.   

    用new分配灵活,比方说读文件时
    如果不用new的话,你必须创建一个足够大的缓冲区来接受文件内容,如果小了,无法一次将文件内容都读入到内存中,大了,浪费内存.
    如果用new的话,你可以先得到文件大小,然后new一个合适的缓冲区,不会不合适,也不会浪费内存.只是要注意在不使用该缓冲区时delete该缓冲区