我想问一个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()返回的是什么呢?请指教。
C++中的创建实例问题,请进
答案:4 悬赏:60 手机版
解决时间 2021-03-17 15:56
- 提问者网友:浪荡绅士
- 2021-03-17 01:19
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-03-17 01:45
第一:Processdlg p=new Processdlg();//这句错了,原因楼上说了。
第二:这个应该是你要问的,一个是局部变量,一个是局部指针,但指针里面保存的是堆的东东的地址,你搞C#应该也知道堆栈的区别吧!局部变量,在局部作用区中有效,也就是保存在栈里,运行完这部分,就被清掉了,所以会消失,但堆里的东西只有自己删除了才会消失,不删除就造成内存泄露了!
补充:在C++中,new Processdlg()返回的是一个指针,那么在C#中,new Processdlg()返回的是什么呢?请指教
这个问题,我无法回答,C#我只是了解了基本的语法,其它深一点的我不懂!你得自己去查查了!这种语言问题,你应该多去CSDN论坛逛,我也一般在那混!
第二:这个应该是你要问的,一个是局部变量,一个是局部指针,但指针里面保存的是堆的东东的地址,你搞C#应该也知道堆栈的区别吧!局部变量,在局部作用区中有效,也就是保存在栈里,运行完这部分,就被清掉了,所以会消失,但堆里的东西只有自己删除了才会消失,不删除就造成内存泄露了!
补充:在C++中,new Processdlg()返回的是一个指针,那么在C#中,new Processdlg()返回的是什么呢?请指教
这个问题,我无法回答,C#我只是了解了基本的语法,其它深一点的我不懂!你得自己去查查了!这种语言问题,你应该多去CSDN论坛逛,我也一般在那混!
全部回答
- 1楼网友:猎心人
- 2021-03-17 03:20
Processdlg p=new Processdlg();
p.Create(IDD_DIALOG,this);
p.ShowWindow(SW_SHOW);
你的p是局部变量,p.ShowWindow(SW_SHOW);函数都返回了,要销毁栈中的变量,窗口也就销毁了吧。而你的*p是个窗口指针,指针销毁了,窗口还在的。
- 2楼网友:撞了怀
- 2021-03-17 02:17
Processdlg p=new Processdlg();
p.Create(IDD_DIALOG,this);
p.ShowWindow(SW_SHOW);
在C++中,这从语法上就是错误的,怎么能编译成功呢?
new Processdlg()返回一个Processdlg*,怎么能赋值给一个Processdlg呢?
-----------------
C#中,new Processdlg()返回一个Processdlg对象的引用。
----------------
C#中不需要删除对象,因为有垃圾收集器,但是C++没有,需要自行删除。
- 3楼网友:轻熟杀无赦
- 2021-03-17 01:51
类型不对,一个是指针,一个是实例
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯