如何释放实现了某接口的类实例!按如下情况释放为何会出错

softme 2002-09-05 01:52:52
type
IDescendant = interface(IAncestor)
procedure P2;
end;

TSomething = class(TInterfacedObject, IDescendant)
procedure P1;
end;

var
D: IDescendant;
something: tsomething;

implementation

{$R *.dfm}
procedure TSomething.P1;
begin
ShowMessage('实现接口IDescendant的类TSomething的P1');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
something := TSomething.Create;
D := something;
D.P1;
something.free //执行该语句出错误?为何?
end;
...全文
46 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨梅无痕 2002-09-05
  • 打赏
  • 举报
回复
接口不需要你显式的释放,Delphi会为你处理接口的Destroy。
但如果你没有使用接口,就是说,把
D := something;
D.P1;
两句注释掉,仅仅使用接口的实现类,那么是需要Free的。

哎呀,脸有点发烫呀!^_^
softme 2002-09-05
  • 打赏
  • 举报
回复
谢谢 ok
墨梅无痕 2002-09-05
  • 打赏
  • 举报
回复
不好意思,一时脑子胡涂,说错了。
墨梅无痕 2002-09-05
  • 打赏
  • 举报
回复
释放接口用nil就可以了:
Something := nil;

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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