Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Freigabe eines Objektes wenn keine Referenz mehr drauf z

  Alt 30. Sep 2005, 18:17
Ich glaube du solltest eher das Singleton Pattern implementieren, wenn du einen Referenzzähler haben möchtest.
Das würde dann eher so aussehen :
Delphi-Quellcode:
unit UTestClass;

interface
 
uses ....;

  type
    TTestClass = class(TObject)
      protected
        refCount : Integer;
        constructor create;
      public
        class function getInstance : TTestClass;
        class procedure releaseInstance;
    end;

implementation

var GlobalInstance : TTestClass;

class function TTestClass.getInstance;
begin
  if not assigned(GlobalInstance) then
    begin
      GlobalInstance := TTestClass.create;
    end; // if assigned(GlobalInstance)
  inc(GlobalInstance.refCount);
  result := GlobalInstance;
end; // class function TTestClass.getInstance;

class procedure TTestClass.releaseInstance;
begin
  if assigned(GlobalInstance) then
    begin
      dec(GlobalInstance.refCount);
      if (GlobalInstance.refCount < 1) then
        begin
          GlobalInstance.Free;
        end; // if (GlobalInstance.refCount < 1)
    end; // if assigned(GlobalInstance)
end; // class procedure TTestClass.releaseInstance;

constructor TTestClass.create;
begin
  self.refCount := 0;
end; // constructor TTestClass.create;
Musst du gucken, ob du irgendwas nebenläufig machst, dann wäre natürlich ne Criticalsection nicht unwichtig. Für Fehler im Code vorab sorry, hab es gerade nur im Browser gemacht, ohne Syntaxcheck.
  Mit Zitat antworten Zitat