加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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部分的另一个警告 – 它们发生在全局异常处理程序之外.发生的任何异常都会终止应用程序.因此,跟踪和调试这些异常可能是大型程序的痛苦.您可以考虑在那里使用自己的异常日志记录,以确保.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读