一个菜鸟问题,恐怕有许多人也有这个问题(50分赠送)

xiaoming851 2002-01-07 08:35:59
一个菜鸟问题,恐怕有许多人也有这个问题
//form2为继承TFORM的
form2 *testwin = new TForm
testwin->Show();
delete testwin
//最后为什么还要删除此指针哪?可是在屏幕上还是可以照样现实此窗口
如果是new form2哪?还需要删除吗?
不删除可以吗?为什么?
谢谢
:)
...全文
162 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoming851 2002-01-10
  • 打赏
  • 举报
回复
to all~~~~~~~~~~~~~~~
谢谢大家,请问
ShowModal()与Show()两者有什么差别,他们占用内存的形势分别是什么??
为什么删除ShowModal()现实出来的窗口实例后,那个窗口为什么会继续显示,除非用close()关闭哪??
谢谢大家呀~~~~
xiaoming851 2002-01-10
  • 打赏
  • 举报
回复
to all~~~~~~~~~~~~~~~
谢谢大家,请问
ShowModal()与Show()两者有什么差别,他们占用内存的形势分别是什么??
为什么删除ShowModal()现实出来的窗口实例后,那个窗口为什么会继续显示,除非用close()关闭哪??
谢谢大家呀~~~~
KingOf007 2002-01-07
  • 打赏
  • 举报
回复
我想你可能是没有搞明白类和类的实例这两个概念,
TForm是个类,你用new的时候,新建了一个TForm的实例,比如testwin,你用delete,也是删除了这个实例,对这个类没有影响,如果这个类还有其它实例,也不会受到影响,所以你还能见到其它的实例(窗口),而这个可以见到的窗口肯定不是你刚才删除的那个;如nickgg(溜达溜达) 所说,一闪而过的才是你delete掉的那个,用testwin->WhowModal()吧
KingOf007 2002-01-07
  • 打赏
  • 举报
回复
你new的时候,实际上是新分配了一块内存,也就是有两个TForm的实例,delete掉一个,还有一个呢:)
xiaoming851 2002-01-07
  • 打赏
  • 举报
回复
------------------------------------------请看清楚在回答,谢谢!!

如果删除了testwin所指向的内存,其实是形成当前窗口所用的内存,如果吧内存删除了,那窗口为什么还会存在哪???
此段内存与窗口有什么关系哪?


---------------------------------------------
hcw_peter 2002-01-07
  • 打赏
  • 举报
回复
有借有還啊!!!
___NULL 2002-01-07
  • 打赏
  • 举报
回复
在 win2000 下的话,只要主程序关闭的话,所有该程序的内存开销都会自动释放,98 则不会
xiaoming851 2002-01-07
  • 打赏
  • 举报
回复
up
??
AirFish 2002-01-07
  • 打赏
  • 举报
回复
testwin->Show()的时候,程序已经暂时终止了,它去执行testwin里的代码了,在你关闭testwin之前,delete是不会执行的.
shiningstar 2002-01-07
  • 打赏
  • 举报
回复
那要是在FormClose里写上Action=caFree;那么还用delete吗?
xiaoming851 2002-01-07
  • 打赏
  • 举报
回复
to nickgg
如果删除了testwin所指向的内存,其实是形成当前窗口所用的内存,如果吧内存删除了,那窗口为什么还会存在哪???
此段内存与窗口有什么关系哪?
nickgg 2002-01-07
  • 打赏
  • 举报
回复
form2 *testwin = new TForm// Error
-> =new TForm2;
testwin->Show();
delete testwin;//应该是一闪而过
zjqc 2002-01-07
  • 打赏
  • 举报
回复
是不是这样的呢?删除内存地址不是等同于删除这个程序,它已经进入内存了,(你看得懂吗?我自己都不知道写什么,只能意会啦!^_^)
xiaoming851 2002-01-07
  • 打赏
  • 举报
回复
to ALL~~~~~~~~~~
呵呵,可能我地表达能力不强,
我的意思是说为什么删除了此内存空间,可是在屏幕上还能看到这个窗口?并且可以操作这个窗口上的一些控件???
这点使我疑惑不解,呵呵,谢谢你们呀
tokens 2002-01-07
  • 打赏
  • 举报
回复
看一下C++方面的书再书BCB吧。。
new是分配内存区的,用完了当然要delete它了,如果不delete的话,运行几次以后你就得重新启动了。。
qiwei 2002-01-07
  • 打赏
  • 举报
回复
不删除也可以,但大好内存就被浪费掉了!
new之后,被分配了一块内存,且别人不能再用了,除非你Delete掉之后!
child_bj 2002-01-07
  • 打赏
  • 举报
回复
/******************AirFish(铁甲飞鱼) (2002-1-7 10:34:16) 得0分
testwin->Show()的时候,程序已经暂时终止了,它去执行testwin里的代码了,在你关闭testwin之前,delete是不会执行的.*******************/


这位兄说错了吧,你说的是ShowModal()的形式。我同意logical(阿来)和 KingOf007(不妨醉一回) 说的。
MasterGo 2002-01-07
  • 打赏
  • 举报
回复
很怪!!
我想是不是当你运行pTestWin->Show();时,BCB首先调用的是Form1的绘窗体函数,再绘
pTestWin的窗体
sbean 2002-01-07
  • 打赏
  • 举报
回复
当用newform->ShowModal()时;
释放空间,用delete newform;
当用newform->Show()时;
将TForm的事件FormClose里写上Action=caFree;
当关闭newform时,空间自动释放,并且(照样现示此窗口)的现象没有了。
sharp_shooter 2002-01-07
  • 打赏
  • 举报
回复
我想你可能是没有搞明白类和类的实例这两个概念,
TForm是个类,你用new的时候,新建了一个TForm的实例,比如testwin,你用delete,也是删除了这个实例,对这个类没有影响,如果这个类还有其它实例,也不会受到影响,所以你还能见到其它的实例(窗口),而这个可以见到的窗口肯定不是你刚才删除的那个;如nickgg(溜达溜达) 所说,一闪而过的才是你delete掉的那个,用testwin->WhowModal()吧

应该是在编译时就出错了的,testwin为指向form2类的指针,而new的是TForm类,
"form2 *testwin = new TForm;"是不是应该改为:"TForm *testwin = new TForm(Application);"或"form2 *testwin = new form2(Application);".
另,如果你想在Show之后删除它就不能简单地用"testwin->Show();",应该用"testwin->ShowModal();"
故代码:
TForm2 *pTestWin = new TForm2(Application);
pTestWin->Show();
delete pTestWin;
运行后是TForm2类型的窗口刚显示又很快地关闭.(正常应用时除了软件封面这样做之外最好别用)

而代码:
TForm2 *pTestWin = new TForm2(Application);
pTestWin->ShowModal();
delete pTestWin;
运行后是TForm2类型的窗口显示出来直到你自己以别的方法关闭它.(常见的应用)

我觉的这两者都对,咋办呢
加载更多回复(3)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧