gpt4 book ai didi

delphi - 如何在Delphi中实现引用计数对象

转载 作者:行者123 更新时间:2023-12-02 08:53:22 31 4
gpt4 key购买 nike

我有一个类似图表的结构。我不知道何时以传统的 Delphi 方式销毁对象,相反,我想实现诸如引用计数对象之类的东西。我知道我可以使用 object.GetReference 和 object.Release 之类的东西来代替 Free,并使用私有(private)变量进行引用计数,但是有没有更好的方法?

谢谢

最佳答案

如果您无法确定在 Delphi 程序中销毁标准对象的正确方法(位置、顺序等),那么使用引用计数对象或接口(interface)根本不会对您有任何帮助。

我知道您希望图中的节点保持相互引用,并且当对象没有剩余引用时,它应该自动销毁。但考虑到两个节点都可以引用另一个节点,并且引用计数永远不会再次达到 0,因此这些对象将永远不会被释放。您将需要手动破坏至少一个引用/依赖项。如果无论如何你都必须这样做,那么你也可以完全跳过引用计数。有关更多信息,请参阅有关 weak references 的维基百科文章。 Delphi 中可以使用接口(interface)进行引用计数,但弱引用只能通过巧妙的类型转换来维护。有关示例,请参阅 this source code and its comments .

您可能想要探索的一个想法是保留对象的标准生命周期管理,并让图形对象跟踪依赖关系。

让每个图形对象都有一个与其有连接的其他对象的列表。现在,您可以简单地释放任何对象,列表的内务代码将从所有其他对象中删除对正在销毁的对象的所有引用。如果你想修改图表,你只需释放你想要删除的节点,依赖关系就会被更新。如果你想销毁整个图,只需销毁所有节点即可。基本上,您有一个节点列表(所有权、生命周期管理)和另一个用于描述图形的数据结构。

关于delphi - 如何在Delphi中实现引用计数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487311/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com