好人帮忙看一下,释放接口实现对象时报错?!

sdzeng 2005-02-17 03:23:33
type
IShowMsg = interface
procedure ShowCalssName;
end;

T_A= class(TInterfacedObject,IShowMsg)
public
procedure ShowCalssName;
end;
//------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
II : IShowMsg;
ca : T_A;
begin
ca := T_A.Create;
try
II := ca;
II.ShowCalssName;
II := nil;
finally
//FreeAndNil(ca); //释放时报错!
end;
end;
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdzeng 2005-02-17
  • 打赏
  • 举报
回复
谢谢无之心
我去查了一些Delphi联机帮助,确实是这样
alphax 2005-02-17
  • 打赏
  • 举报
回复
Interface默认为遵循COM规范,而从TInterfacedObject继承而来的interface实现对象(你的例子中就是T_A)都有一个引用计数,当引用计数为0时,对象被构释,所以

II := nil;
这一句就释放了你创建的ca了,所以当你再一次释放ca,就会出错
sdzeng 2005-02-17
  • 打赏
  • 举报
回复
人人为我,我为人人啊!
兄弟姐妹们!
知道的回复一下,要不我今天连觉都睡不好了:)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧