用接口来接管对象引用,以此来操作该对象,这种做法很常见,也很实用。
但是,在由于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-keyes-继电器Delphi 接口到 Keyes USB 中继设备 描述从找到的 rar 文件翻译文件 usb_relay_device.h用法创建一个新的 Delphi 项目将usb_relay_device.pas和UsbRelay.pas文件复制到项目的源目录中,或将该目录...
高教类课件:Delphi面向对象程序设计
1. 新增安装环境 xe 10.4.2 syndney 2. 取消支援intraWeb 元件 安装方式 1.解压缩档案 2.将解压缩目录下source 路径新增到library path 3.打开package下所属版本... sgcWebSocketsD10_4.groupproj : Delphi 10.4
Delphi教程:Delphi 窗体生成代码
精典源码Delphi149:Delphi技巧源码合集一.rar
Delphi接口和面向对象的编程实例..rar
I:\delphi语法基础12.docI:\delphi语法基础12.docI:\delphi语法基础12.docI:\delphi语法基础12.docI:\delphi语法基础12.docI:\delphi语法基础12.doc
delphi接口统一方法 delphi接口统一方法delphi接口统一方法delphi接口统一方法
精典源码Delphi150:Delphi技巧源码合集二.rar
精典源码Delphi144:Delphi演示Params属性如何使用的小例子.rar
精典源码Delphi151:Delphi恢复删除文件源代码.rar
这个程序所包含的是,籍由故意设计而成的TInterfacedObject和TMyInterfacedObject2个类,得到4个实例对象,4个接口指针,并且演示了在编译器实现过程中,对象模型的空间状态,接口指针,接口方法表格种种复杂的关系...
精典源码Delphi147:Delphi可直接编译的仓库管理系统Access版.rar
摘要:Delphi源码,文件操作,OLE,Excel 一个基于Delphi语言编写...而Excel的表格是从1开始编号,Excel的表格是从1开始编号,传送字段名,数据库到Excel的数据传输完毕,文件存盘,发生错误时给出提示,最后退出OLE对象
精典源码Delphi146:Delphi刻录软件源码.rar
delphi面向对象 delphi面向对象 delphi面向对象 delphi面向对象
DELPHI接口技术开发实例解析, DELPHI接口技术开发实例解析,DELPHI接口技术开发实例解析
《软件工程师入门:Delphi范例完全自学手册》的光盘文件
Delphi组件大全、原书名称[软件工程师的典藏—Delphi组件大全]、作者:明日科技,扫描高清版带书签。 此资源共三个压缩文件,每卷资源分:1分 1、资源名称:Delphi组件大全[扫描高清版带书签_共三卷第一卷],文件:...
borland资深专家李维的经典作品,全面介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,全面展现了作者深厚技术实践经验的精髓。 本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发...