CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

搞不懂啦!!!

楼主keboy(青鸟)2000-12-20 09:26:00 在 C++ Builder / 基础类 提问

各位同好:  
  在   C++Builder中,动态创建一个组件  
  如Form3   =   new   TForm3(Form2);  
  这个Form2参数是一个TComponent类型的参数;当然也可写Application或其他的...  
  使用它我可以new   了Form3而不去delete   Form3;  
  因为当Form2释放时,他会自动去释放   Form3所指向的内存区域;  
  毫无疑问,我这样写:  
  delete   Form2;  
  delete   Form3肯定是有问题的.因为Form3->的地方是memory   freed;  
   
  But问题来啦!!!  
  偶这样写  
  delete   Form3;  
  delete   Form2;  
  没事!!!!  
  搞不懂啦!!!  
   
  看了vcl的源码,依旧百思不得其解!!!  
   
   
  问题点数:50、回复次数:7Top

1 楼storyxlx(风笛)回复于 2000-12-20 09:37:00 得分 0

很对呀,Form3里没有指向Form2的指针,删Form3对Form2怎么会有影响?Top

2 楼Wingsun(孙春阳)回复于 2000-12-20 10:20:00 得分 5

没有问题啊,你删除Form3但是不会删除Form3的Owner   Form2。反过来就是对的。Top

3 楼keboy(青鸟)回复于 2000-12-20 13:46:00 得分 0

NO!!!  
  Form2所指向的对象里有一个私有的数据成员,FOwner;  
  当Form3   =   new   TForm3(Form2)时;  
  Form2所指向的对象里的FOwner就被赋作Form3了.  
  当我delete   Form3;Form3对象删除;  
  我再delete   Form2;  
  这时,~TForm2()会去delete   FOwner;  
  而FOwner又指向Form3的内存地址,Form3又是析构了的,  
  应该会发生问题;Top

4 楼storyxlx(风笛)回复于 2000-12-20 14:23:00 得分 5

TForm   *Form;  
  Form   =   NULL;  
  delete   Form  
  会出错吗?  
  你不连续删,中间插个new   TButton之类的东东试试。Top

5 楼whoo(谁)回复于 2000-12-20 14:36:00 得分 40

FOwner,是指Form2的所有者吧.应该是Form3.Fowner   =   Form2才对,不是Form2.FOwner   =   Form3.Top

6 楼keboy(青鸟)回复于 2000-12-20 15:43:00 得分 0

哦,好象对了.whoo说的没错.我又看了一下源码Top

7 楼keboy(青鸟)回复于 2000-12-20 17:56:00 得分 0

原来TComponent   还有TList作为保护机制.  
  怪说不得没问题!  
  但是whoo的回答没到点子上/Top

相关问题

  • 搞不懂
  • 搞不懂啊!!!!
  • 搞不懂widechar
  • 搞不懂~!
  • 搞不懂??
  • 搞不懂
  • 搞不懂!
  • 搞不懂c++
  • 搞不懂!!!!
  • 搞不懂的memcpy,搞不懂的void *

关键词

  • fowner
  • 指向
  • form
  • 删除
  • delete
  • tform
  • 对象
  • 问题

得分解答快速导航

  • 帖主:keboy
  • Wingsun
  • storyxlx
  • whoo

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo