Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie Mehrfachfreigabe eines Objektes verhindern?

  Alt 24. Feb 2010, 17:38
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.
$2B or not $2B
  Mit Zitat antworten Zitat