【发布时间】:2014-12-09 09:15:48
【问题描述】:
为什么TForm的_release方法不调用析构函数?
var
F, U : IUnknown;
procedure TForm1.btn1Click(Sender: TObject);
begin
U := IUnknown(TMyObject.Create); // MyIterfacedObject (inherits TInterfacedObject)
F := IUnknown(TMyForm.Create(nil));
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
U := nil; // Calls destructor
F._Release; // Does not call destructor
F := nil; // Does not call destructor
end;
我看了一下 TInterfaceObject 和 TComponent 类的 _release 方法:
function TInterfacedObject._Release: Integer;
begin
Result := InterlockedDecrement(FRefCount);
if Result = 0 then
Destroy;
end;
function TComponent._Release: Integer;
begin
if FVCLComObject = nil then
Result := -1 // -1 indicates no reference counting is taking place
else
Result := IVCLComObject(FVCLComObject)._Release;
end;
TInterfacedObject 的 _release 似乎很好理解,但是 TComponent 的 _release 是做什么的呢?对我来说似乎很奇怪......
【问题讨论】:
标签: delphi interface vcl delphi-2006