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