Delphi-Quellcode:
type
TReferenceObject =
class
private
FReferences: Integer;
public
procedure FreeInstance;
override;
procedure IncRef;
procedure DecRef;
end;
procedure TReferenceObject.FreeInstance;
begin
if FReferences = 0
then
inherited FreeInstance;
end;
procedure TReferenceObject.IncRef;
begin
Inc(FReferences);
end;
procedure TReferenceObject.DecRef;
begin
Dec(FReferences);
end;
Allerdings muß man hier aufpassen, daß .IncRef und .DecRef ordentlich gesetzt und auch wieder zurückgesetzt werden, sonst bekommt man Probleme.
Delphi-Quellcode:
Obj := TObj.Create;
Obj.IncRef;
Obj2 := Obj;
Obj2.IncRef;
Obj.DecRef;
Obj.Free;
Obj2.DecRef;
Obj2.Free; // erst hier wird das Objekt freigegeben
Delphi-Quellcode:
Obj := TObj.Create;
Obj.IncRef;
Obj2 := Obj;
Obj2.IncRef;
Obj2.DecRef;
Obj2.Free;
Obj.DecRef;
Obj.Free; // erst hier wird das Objekt freigegeben
Bei Interfaces zählt Delphi aufomatisch mit und sorgt selber für's Freigeben, somit kann man sich nicht verzählen.