0
基本的な質問。 Button1Clickでは、インターフェイスオブジェクトを作成します。作成後の参照カウントは0です。 オブジェクトを引数として渡します。 Refカウントが増加し、関数の終わりに減少し、0になると、関数は破壊されます。私は何かが恋しいですか?最初にオブジェクトを作成すると、refカウントが1になると思っていましたか? lListFilterはオブジェクトへの参照を保持していませんか? Button1Click
でデルファイインタフェースでの参照カウント
type
IPersistentListFilter = Interface(IInterface)
['{57cdcf89-60ee-4b3c-99fd-177b4b98d7e5}']
procedure IncludeObject;
end;
procedure FillList(AFilter : IPersistentListFilter);
type
TPersistentListFilter = class(TInterfacedObject, IPersistentListFilter)
procedure IncludeObject;
constructor Create;
destructor Destroy; override;
end;
implementation
procedure FillList(AFilter: IPersistentListFilter);
begin
AFilter.IncludeObject;
end;
constructor TPersistentListFilter.Create;
begin
inherited;
end;
destructor TPersistentListFilter.Destroy;
begin
inherited;
end;
procedure TPersistentListFilter.IncludeObject;
begin
// do nothing
end;
procedure TForm8.Button1Click(Sender: TObject);
var
lListFilter: TPersistentListFilter;
begin
lListFilter := TPersistentListFilter.Create;
// ref count is 0
FillList(lListFilter);
// lListFilter has been destroyed
FillList(lListFilter); // --> error
end;
Thnksデイブを!今度は.createがrefカウントを増加させなかったのは明らかですが、なぜFillList(lListFilter)がTPersistentListFilter ..と誤って宣言されているのかについてrefカウントを増やした理由が混乱しています。 – siwmas
'FillList'は' IPersistentListFilter'引数 –
'FillList'の 'AFilter'パラメータは 'IPersistentListFilter'として宣言されています。 'lListFilter'は 'TPersistentListFilter'ではなく 'IPersistentListFilter'として渡されます* –