C++中的创建实例问题,请进

来源:百度知道 编辑:UC知道 时间:2024/05/25 16:28:10
我想问一个C++中的简单问题。
在C++中非模式话的show一个窗体,是如下代码:
Processdlg *p=new Processdlg();
p->Create(IDD_DIALOG,this);
p->ShowWindow(SW_SHOW);
Processdlg是一个窗体类,编译,成功Show出这个对话框。
但是我改成:
Processdlg p=new Processdlg();
p.Create(IDD_DIALOG,this);
p.ShowWindow(SW_SHOW);
编译没错,但是运行后,窗体一闪就没了,我很是不明白,这两者有什么分别吗?
我现在搞C#,不搞C++已经有一年多了,C++基础的东西都忘了,还望高手能够指点下,谢谢了。
那C#中怎么可以这样呢?请问你知道C#中是怎么维护这个new的吗?C#中new出来的应该也是内存地址吧,怎么可以赋给类实例。

3L的高手,我已经留言给你了,那我还想问你个问题:
在C++中,new Processdlg()返回的是一个指针,那么在C#中,new Processdlg()返回的是什么呢?请指教。

第一:Processdlg p=new Processdlg();//这句错了,原因楼上说了。
第二:这个应该是你要问的,一个是局部变量,一个是局部指针,但指针里面保存的是堆的东东的地址,你搞C#应该也知道堆栈的区别吧!局部变量,在局部作用区中有效,也就是保存在栈里,运行完这部分,就被清掉了,所以会消失,但堆里的东西只有自己删除了才会消失,不删除就造成内存泄露了!

补充:在C++中,new Processdlg()返回的是一个指针,那么在C#中,new Processdlg()返回的是什么呢?请指教
这个问题,我无法回答,C#我只是了解了基本的语法,其它深一点的我不懂!你得自己去查查了!这种语言问题,你应该多去CSDN论坛逛,我也一般在那混!

类型不对,一个是指针,一个是实例

Processdlg p=new Processdlg();
p.Create(IDD_DIALOG,this);
p.ShowWindow(SW_SHOW);
在C++中,这从语法上就是错误的,怎么能编译成功呢?

new Processdlg()返回一个Processdlg*,怎么能赋值给一个Processdlg呢?

-----------------

C#中,new Processdlg()返回一个Processdlg对象的引用。

----------------

C#中不需要删除对象,因为有垃圾收集器,但是C++没有,需要自行删除。

Processdlg p=new Processdlg();
p.Create(IDD_DIALOG,this);
p.ShowWindow(SW_SHOW);

你的p是局部变量,p.ShowWindow(SW_SHOW);函数都返回了,要销毁栈中的变量,窗口也就销毁了吧。而你的*p是个窗口指针,指针销毁了,窗口还在的。