gpt4 book ai didi

Delphi 避免 try finally block

转载 作者:行者123 更新时间:2023-12-03 18:07:29 25 4
gpt4 key购买 nike

我了解到在 Delphi 中我必须使用 try .. finally 来释放堆上分配的对象。在 Java 中,我从不这样做,因为这不是我的工作,但这是垃圾收集器所做的事情。 delphi 也没有在 windows 上引用计数,所以我最终需要使用 try。有替代方案吗?

我是否必须使用接口(interface)或特定类来避开守卫?喜欢

var a: ttest;
begin
a := ttest.create;
//do stuff
end;

最佳答案

您可以为某些事情使用接口(interface),但从根本上说,Delphi 根本没有为 Windows 和 OSX 的遗留桌面编译器中的常规对象实现垃圾收集或引用计数(它确实在适用于 Android、iOS 和 Linux 的 NextGen 编译器***)。

对所有事情都使用接口(interface)是不切实际的,所以你必须习惯于自己清理。如果您创建了一个对象,请在使用完毕后将其释放。

现在,您可以想出各种聪明的模式来整理或变通,必须使用简单的 try/finally block ,但这最终会导致很多工作,你最终会产生不符合语言风格的笨重、笨拙的代码。不可避免地,您还将使用第三方库、组件等,所有这些通常都以大多数 Delphi 代码通用的风格编写。

在此基础上粗暴地强制使用人工内存管理模式将比简单地以“Delphi 方式”做更多的工作,并且会产生其他程序员难以理解和使用的代码。只是不要这样做。

智能指针是自动化生命周期管理的一种方式。可以在此处找到一个很好的示例实现:

Delphi - smart pointers and generics TList

但这成为一种难以概括的模式,特别是对于具有采用各种参数列表的构造函数的对象。接口(interface)或智能指针实现通常是为解决特定类型问题而创建的工具。它们并没有作为自动内存管理的粗略解决方案应用,并且试图将它们硬塞进这个角色确实会非常困难。


*** 自撰写此答案以来,即使是 Embarcadero have abandoned object ARC出于类似原因在新编译器中。

关于Delphi 避免 try finally block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983184/

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