1

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

谢谢。

4

2 回答 2

4

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

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

当我有全局变量时,通常代表重要资源,它们通常由管理整个程序的对象设置。它们在初始化时被创建,并在主对象的销毁过程中被清除。另一方面,如果您在initialization一个单元的一个部分中创建它,您会希望清理在同一单元的finalization部分中。

于 2013-10-04T19:08:52.497 回答
2

TStringList 应该可以安全地在部分中初始化initialization和释放。finalization

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

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

于 2013-10-04T19:09:11.017 回答