delphi – 如何检查对象引用是否仍然有效?
发布时间:2020-12-15 09:42:26 所属栏目:大数据 来源:网络整理
导读:我有一个问题,我试图确定对象的引用是否有效.但它似乎正在回归奇怪的结果. procedure TForm1.Button1Click(Sender: TObject); var form1 : TForm; ref2 : TControl;begin form1 := TForm.Create(nil); form1.Name := 'CustomForm'; form1.Parent := self; //
我有一个问题,我试图确定对象的引用是否有效.但它似乎正在回归奇怪的结果.
procedure TForm1.Button1Click(Sender: TObject); var form1 : TForm; ref2 : TControl; begin form1 := TForm.Create(nil); form1.Name := 'CustomForm'; form1.Parent := self; //Main Form form1.Show; ref2 := form1; showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true)); freeandnil(form1); showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true)); end; 第一个showmessage返回 – “TForm – CustomForm – True”(就像我期望的那样). 第二个showmessage回归 – “TForm – – False”.我实际上希望某种访问违规,然后我可以陷阱并知道该引用无效. 在我的应用程序中,我需要在创建它们时编译随机TForm后代的列表,然后稍后检查它们是否已经消失(或者不可见).不幸的是,这是一个基于插件的系统,所以我可以改变所有这些表格来发布“我已完成消息”. 像这样的代码是否可以安全使用(假设我实际上正在检查访问违规)?有没有人有任何想法发生了什么. 谢谢 解决方法
问题是,在某种可能性下,访问的内存仍由Delphi内存管理器保留.在这种情况下,Windows不会生成任何类型的访问冲突,因为该内存属于您!
一种可能性是切换到不同的Delphi内存管理器,它可以检测释放对象的使用.例如,FastMM4有几个“内存卫生”检查,这对于调试非常有用,但即使这样,你也不会立即捕获所有这些错误. 你可以download FastMM4 from SourceForge. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |