在delphi中释放一个全局变量

时间:2013-10-04 18:58:28

标签: delphi

我知道不加区别地使用全局变量是不明智的。但是,我需要使用一个 - 一个TStringList。我的问题是我如何(以及在​​哪里)释放它?搜索过,但找不到任何文档。

感谢。

2 个答案:

答案 0 :(得分:4)

这可以通过记住内存管理的基本原则来解答:the Single Ownership Principle。每个变量都应该有一个所有者,负责清理它。

无论代码创建什么,TStringList都应该负责在适当的时间销毁它(如果它是全局的,则将全局变量设置为 nil )。那你在哪里创造它?

当我拥有通常代表重要资源的全局变量时,它们通常由管理整个程序的对象建立。它们在初始化时创建,并在销毁主对象期间进行清理。另一方面,如果您在单元的initialization部分创建它,则需要清理该单元的finalization部分。

答案 1 :(得分:2)

TStringList在initialization中初始化并在finalization部分中免费应该是安全的。

作为建议,考虑将对全局变量的访问封装到函数中,这样就可以将var声明移动到implementation部分并对其进行更多控制。

请注意initializationfinalization在其他情况下可能不合适。特别是当涉及线程或需要LoadLibrary() / FreeLibrary()调用时,最好有专门的程序在正常的程序流程中执行此操作。 initializationfinalization部分都在一个状态下执行,Windows会阻止某些事情。