gpt4 book ai didi

Delphi 和单元中的最终确定

转载 作者:行者123 更新时间:2023-12-03 15:15:02 28 4
gpt4 key购买 nike

我有两个单位unitA和unitB。类 TFoo 在 unitB 中声明。

在unitA的最终确定中调用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 定义。

关于初始化和终结部分的另一条警告 - 它们发生在全局异常处理程序之外。那里发生的任何异常都会终止应用程序。因此,在大型程序中跟踪和调试这些异常可能会很痛苦。为了确定起见,您可以考虑使用自己的异常日志记录。

关于Delphi 和单元中的最终确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com