我知道不加选择地使用全局变量是不明智的。但是,我需要使用一个 - TStringList。我的问题是如何(以及在哪里)释放它?搜索,但找不到任何有关它的文档。
谢谢。
这可以通过记住内存管理的基本原则来回答:单一所有权原则。每个变量都应该有一个所有者,负责清理它。
无论您创建什么代码,您TStringList
还应该负责在适当的时间销毁它(并且,如果它是全局的,则将全局变量设置为nil)。那么你在哪里创建它?
当我有全局变量时,通常代表重要资源,它们通常由管理整个程序的对象设置。它们在初始化时被创建,并在主对象的销毁过程中被清除。另一方面,如果您在initialization
一个单元的一个部分中创建它,您会希望清理在同一单元的finalization
部分中。
TStringList 应该可以安全地在部分中初始化initialization
和释放。finalization
作为建议,考虑将对全局变量的访问封装到一个函数中,这样您就可以将 var 声明移动到该implementation
部分并对其进行更多控制。
请注意,initialization
andfinalization
在其他情况下可能不合适。尤其是当涉及到线程或LoadLibrary() / FreeLibrary()
需要调用时,最好在正常的程序流程中有专门的程序来执行此操作。initialization
和部分都finalization
在 Windows 阻止某些事情的状态下执行。