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.