我有一个像结构的图形.我不确切知道何时以传统的Delphi方式销毁对象,而是想实现类似引用计数对象的东西.我知道我可以使用像object.GetReference和object.lease而不是Free,并使用私有变量进行引用计数,但有没有更好的方法?
谢谢
如果您在确定Delphi程序中销毁标准对象的正确方法(位置,顺序等)时遇到问题,那么使用引用计数对象或接口将无助于您.
我知道你希望图中的节点保持彼此的引用,当没有对象的引用时,它应该被自动销毁.但考虑到两个节点每个都可以引用另一个节点的事实,并且引用计数永远不会再次达到0,因此永远不会释放这些对象.您需要手动中断至少一个引用/依赖项.如果你必须这样做,那么你也可以完全跳过引用计数.有关更多信息,请参阅Wikipedia关于弱引用的文章.接口可以在Delphi中用于引用计数,但弱引用只能通过巧妙的类型转换来维护.有关示例,请参阅此源代码及其注释.
您可能想要探索的一个想法是保持对象的标准生命周期管理,并让图形对象跟踪依赖关系.
让每个图形对象都有一个与其有连接的其他对象的列表.现在您可以简单地释放任何对象,列表的内务代码将删除对所有其他对象销毁的对象的所有引用.如果要修改图形,只需释放要删除的节点,即可更新依赖项.如果要销毁整个图形,只需销毁所有节点.基本上,您有一个节点列表(所有权,生命周期管理)和另一个用于描述图形的数据结构.