`
zhmocean
  • 浏览: 201219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

警告:Delphi 接口引用对象时的陷阱

阅读更多

用接口来接管对象引用,以此来操作该对象,这种做法很常见,也很实用。

但是,在由于Delphi智能的接口机制,可能会让该操作隐含陷阱

首先,让我们简单看一下Delphi的接口机制:

一般,我们写的接口都继承自IInterface,实现接口的类也继承自TInterfacedObject,因为它们都替我们实现了

function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;

到这,问题就来了

以上两个接口生命周期相关的函数是上述接口和类自动替我们实现的

当将一个接口设置为NIL时,它所引用的对象也会被释放掉(的确让人恐怖)(Delphi调用_Release)

所以,当接口引用一个对象且这个对象的生命周期不确定时,这个自动的机制就留下了一个不大不小的隐患。

那到这你是不是想到了,不去手动将接口设为nil?嗯,听我接着说:

delphi的IInterface接口的生命周期是自管理的,因此,当这个接口不再被使用时,Delphi会认为你忘记把这个地址引用置为nil了,所以你会自动给你加上,那么历史又重现了。

那么怎么样避免这个陷阱呢?

我们不能直接将接口设为nil,为了绕开Delphi的自动管理机制,我们需要先将接口转换成指针,然后将它设为nil,这就避免了Delphi认为这个接口不再被使用,自动将其设为nil。

Pointer(IMyInterface) := nil;

分享到:
评论

相关推荐

    高教类课件:Delphi面向对象程序设计

    **Delphi面向对象程序设计**是计算机科学领域中一个重要的主题,尤其在高等教育阶段,它作为教学内容,帮助学生理解面向对象编程的概念和技术。Delphi是一款强大的集成开发环境(IDE),以其快速应用开发(RAD)著称...

    DELPHI接口技术开发实例解析

    接口在Delphi中实现了自动垃圾回收,通过接口引用计数来管理对象的生命周期。当最后一个接口引用被释放时,对象会自动销毁。 7. 异常处理: 接口方法的调用通常包括内置的异常处理机制,如果在接口方法中抛出异常,...

    Delphi接口和面向对象的编程实例..rar

    Delphi中的接口和面向对象编程结合使用时,我们可以实现以下几点: 1. **接口作为契约**:接口可以作为类之间的一种契约,确保类提供了特定的服务。这在设计大型系统时特别有用,因为模块之间可以通过接口进行通信...

    delphi面向对象

    7. RTTI(运行时类型信息):Delphi支持运行时类型信息,允许程序在运行时检查和操作对象的类型。这对于反射、插件系统和动态对象操作非常有用。 8. 泛型:Delphi从Delphi 2009开始引入泛型,允许开发者编写可重用...

    参考实例:Delphi COM深入编程的书籍源码..rar

    Delphi中的`IUnknown`和`IDispatch`是COM的基础接口,所有COM对象都必须实现`IUnknown`,用于对象的引用计数和接口查询。 - **类工厂(Class Factory)**:COM对象的实例化由类工厂负责,类工厂提供`CreateInstance...

    Delphi接口和编程两大陷阱.doc

    1. **不能把一个对象引用强制转换成这个引用的类型没有声明实现的接口**: - 举例说明: ```delphi I1 = interface function Do: Boolean; end; TC1 = class ATT1: Integer; end; TC2 = Class(TC1, I1) ...

    delphi接口统一方法

    在Delphi编程环境中,接口(Interface)是一种强大的设计工具,它允许对象之间的抽象通信,而无需知道具体的实现细节。接口统一方法是指通过一种规范或模式,使得不同的接口具有相同的操作方式,提高代码的可读性、...

    C#调用Delphi接口(ITest = interface)

    1. **Delphi接口(Interface)**:在Delphi中,接口是一种引用类型,它定义了一组方法签名,但不包含实现。接口常用于实现多继承,或者作为COM对象的接口。`ITest = interface`是Delphi中定义接口的基本语法,`ITest...

    delphi面向对象编程思想pdf.rar

    《Delphi面向对象编程思想》是一本深入探讨Delphi编程技术的著作,尤其注重面向对象的设计与实现。这本书详尽地介绍了如何利用Delphi的强大功能进行高效、灵活的软件开发。面向对象编程(OOP)是现代软件工程的核心...

    delphi接口开发

    每个COM对象至少实现一个名为`IUnknown`的接口,它提供了`QueryInterface`、`AddRef`和`Release`三个方法,用于管理对象引用计数和获取其他接口。 1. **接口实现**:在Delphi中,你可以通过在类声明中使用`...

    delphi对象参数调用

    总结,Delphi中的对象参数调用是面向对象编程的核心特性之一,它涉及到对象引用、参数传递方式、接口参数、空值处理以及方法重载等多个方面。理解和熟练运用这些知识点,能帮助开发者编写出更高效、更健壮的Delphi...

    (刘艺)《+Delphi面向对象编程思想》随书光盘下载+

    Delphi中的对象生命周期管理,包括创建、使用和释放对象,以及正确处理指针和引用,防止内存泄漏和资源浪费,是保证程序稳定性和性能的关键。 8. **单元测试和调试**: 学习如何使用Delphi的集成开发环境(IDE)...

    面向对象开发实践之路:DELPHI版(带完整书签)

    borland资深专家李维的经典作品,全面介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,全面展现了作者深厚技术实践经验的精髓。  本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发...

    一个书中的实例:Delphi固定资产管理.rar

    Delphi是Borland公司推出的一种面向对象的可视化编程工具,以其高效、快速的编译能力和强大的Windows应用程序开发能力而闻名。 在本实例中,我们将探讨以下几个关键知识点: 1. **Delphi编程环境**:Delphi提供了...

    GDI+ Delphi接口单元

    在Delphi中使用GDI+接口单元时,首先需要在项目中导入相应的单元文件,例如"System.GDIPlus"或自定义的GDI+接口单元。然后,可以通过创建GDI+类的实例来初始化GDI+环境,比如`GDIPlus.Graphics`对象用于画布操作,`...

    Delphi接口委托的例子代码

    在Delphi编程中,接口(Interface)是一种强大的抽象机制,它定义了对象必须实现的一组方法,但不提供具体的实现。接口在多层架构、组件编程以及实现运行时的动态绑定等方面发挥着重要作用。本示例代码“Delphi接口...

    Delphi与Windows API数据类型对照表

    在开发基于Windows的应用程序时,经常需要使用Windows API(应用程序编程接口)来完成特定的任务。为了更好地将Delphi与Windows API结合使用,理解两者间的数据类型对照是至关重要的。本文将详细解释《Delphi与...

Global site tag (gtag.js) - Google Analytics