如何在Delphi中有效地使用接口进行内存管理

如何在Delphi中有效地使用接口进行内存管理,第1张

概述我是Delphi的新手并且已经手动完成了所有的内存管理,但是听说Delphi能够使用接口来进行引用计数并以这种方式提供一些内存管理.我想开始这个,但有一些问题. >一般来说,我该如何使用它.创建接口和实现它的类.然后,只要我需要该对象,变量实际上是接口类型,但实例化对象和presto?没有必要考虑解放它吗?没有更多的尝试 – 终极? >为真正不需要它们的类创建一堆接口似乎非常麻烦.有关自动生成这些 我是Delphi的新手并且已经手动完成了所有的内存管理,但是听说Delphi能够使用接口来进行引用计数并以这种方式提供一些内存管理.我想开始这个,但有一些问题.

>一般来说,我该如何使用它.创建接口和实现它的类.然后,只要我需要该对象,变量实际上是接口类型,但实例化对象和presto?没有必要考虑解放它吗?没有更多的尝试 – 终极?
>为真正不需要它们的类创建一堆接口似乎非常麻烦.有关自动生成这些的提示吗?我该如何最好地组织它?接口和类在同一个文件中?
>可能导致我悲伤的常见陷阱是什么?例如:将接口对象转换为其类的对象是否会破坏我的引用计数?或者Delphi是否有任何非显而易见的方法来创建引用循环? (除了A使用B使用C使用A)

如果有教程覆盖任何一个,那将是很好的,但我没有在我的搜索中提出任何东西.谢谢.

解决方法 我目前正在处理一个非常大的项目,该项目利用接口引用计数的“副作用”来进行内存管理.

我个人的结论是,你最终得到了许多过于复杂的代码,没有更好的理由,“我不必担心自由呼叫”

出于一些非常基本的原因,我强烈建议不要采取这种行动:

1)您正在使用为了COM兼容性而存在的副作用.

2)您正在使对象占用空间和效率更高.接口是指针列表的指针..或者沿着这些行的东西.

3)就像你说的那样……你现在必须制作成堆的接口,其唯一目的就是避免自己释放记忆……这会导致比我认为更值得的麻烦.

4)在对象被引用之前,当对象被释放时,最常见的错误将是调试的巨大痛苦.我们在自己的引用中有特殊代码,在软件出门之前尝试测试这个问题.

现在回答你的问题.

1)给定TFoo和接口IFoo,您可以使用如下方法

function GetFoo: IFoo;begin  Result := (TFoo.Create as IFoo);end;

…而且,你不需要最终释放它.

2)是的,就像我说的,你认为这是一个好主意,但它变成了bupkis的巨大痛苦

3)2个问题.

A)你有Object1.Interface2和Object2.Interface1 ……由于循环引用,这些对象永远不会被释放

B)在释放所有引用之前释放对象,我不能强调这些错误是多么难以追踪……

总结

以上是内存溢出为你收集整理的如何在Delphi中有效地使用接口进行内存管理全部内容,希望文章能够帮你解决如何在Delphi中有效地使用接口进行内存管理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存