(1)Cmyclass myclass;与Cmyclass * myclass=new Cmyclass()的声明有何不同?后者有什么优点?
(2)在使用对话框类的Domodal(),有没有调用构造函数,对话框是怎么显示出来的呢?

解决方案 »

  1.   

    1 前者存放在堆栈中,后者存放在堆中,后者的优点是动态生成。2.构造函数是在写义对话框的对象是就调用了
    就是这个时候
      CDialog dlg;而Domodal()只是dlg的一个成员函数,它负责显示对话框。
      

  2.   

    问题1:
    Cmyclass myclass; 表示已经生成了这个空间,会执行他的构造函数,
    离开定义域后,会执行析构函数。Cmyclass * myclass=new Cmyclass();
    可以分成两步:
    Cmyclass * myclass;  // (1)
    myclass=new Cmyclass();  // (2)
    第一步只是定义,没有生成这个类的空间,如果此时去访问这个类的成员函数或者修改
    它的成员变量,会出现错误(没有空间,怎么可能访问?)
    第二步:生成了空间,可以访问了,并且执行构造函数,
    只有在delete myclass的时候,才会执行析构函数。
      

  3.   

    关于问题2:
    CAboutDlg aboutDlg;  // (1)
    aboutDlg.DoModal();  // (2)
    在执行(1)的时候调用构造函数,原因就如我上面讲的。
    对话框是在执行aboutDlg.DoModal(); 以后出来的。
      

  4.   

    上面的说的很对,new分配指针可以动态分配不要时可以用delete删除调!而TYPE varie;形式定义是就分配了内存
      

  5.   

    楼上的都讲得很清楚了。
    记得new要和delete配对。