Delphi并在一个单元中完成
发布时间:2020-12-15 09:44:50 所属栏目:大数据 来源:网络整理
导读:我有两个单位unitA和unitB. 类TFoo在unitB中声明. 在单元A的最终确定中调用B.Free是否总是安全的? 它如何依赖于unitA和unitB在dpr中的顺序? 执行unitA终结时,我能确定unitB是否存在? unit unitB;interfacetype TFoo = class // code... end; // code....e
我有两个单位unitA和unitB.
类TFoo在unitB中声明. 在单元A的最终确定中调用B.Free是否总是安全的? 它如何依赖于unitA和unitB在dpr中的顺序? 执行unitA终结时,我能确定unitB是否存在? unit unitB; interface type TFoo = class // code... end; // code.... end; unit unitA; // code.. implementation uses unitB; var A: TStringList; B: UnitB.TFoo; initialization A:= TStringList.Create; B:= UnitB.TFoo.Create; finalization A.Free; B.Free; // Is it safe to call? end. 解决方法
是的,你应该没问题,因为B是在单元A中创建的.规则是初始化部分是根据它们在DPR中的顺序调用的,除非其中一个单元引用另一个单元.在这种情况下,首先初始化引用的单元.最终确定顺序相反.
在你的情况下,单元B没有初始化部分,所以这是一个有争议的问题.但是,当执行单元A初始化部分时,它将使用单元B中的TFoo定义. 关于Initialization和Finalization部分的另一个警告 – 它们发生在全局异常处理程序之外.发生的任何异常都会终止应用程序.因此,跟踪和调试这些异常可能是大型程序的痛苦.您可以考虑在那里使用自己的异常日志记录,以确保. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |