AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Freigabe eines Objektes wenn keine Referenz mehr drauf zeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Freigabe eines Objektes wenn keine Referenz mehr drauf zeigt

Ein Thema von Thebe · begonnen am 30. Sep 2005 · letzter Beitrag vom 30. Sep 2005
Antwort Antwort
Thebe

Registriert seit: 25. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#1

Re: Freigabe eines Objektes wenn keine Referenz mehr drauf z

  Alt 30. Sep 2005, 16:21
Soo
ich hab das nu ma mit den Interfaces probiert, nur so wirklich funkt das nicht.

Testklasse:

Delphi-Quellcode:
unit uTestClass;

interface

uses
  SysUtils;

  type
    TTestClass = class(TObject, IInterface)
    protected
      FRefCount: integer;
    
      function _AddRef: Integer; stdcall;
      function _Release: Integer; stdcall;
      function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    public
      class function NewInstance: TObject; override;
      property RefCount: Integer read FRefCount;
    end;

implementation

{ TTestClass }

function TTestClass._AddRef: Integer;
begin
  FRefCount := RefCount + 1;
  Result := FRefCount; // [X] HALTEPUNKT
end;

function TTestClass._Release: Integer;
begin
  FRefCount := FRefCount - 1;
  Result := FRefCount; // [X] HALTEPUNKT
  if Result = 0 then
    Destroy;
end;

function TTestClass.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := E_NOINTERFACE;
end;

class function TTestClass.NewInstance: TObject;
begin
  Result := inherited NewInstance;
  TTestClass(Result).FRefCount := 1;
end;
Dazu wird an einer bestimmten Stelle folgender Code aufgerufen:

Delphi-Quellcode:
var
  t: TTestClass;
begin
  t := TTestClass.Create();
  t := nil;
end;
Tja, was soll ich sagen, weder _AddRef noch _Release werden aufgerufen. So funktioniert das schon mal auf alle Fälle nicht.

@Marphy:
Das Ding bei deinem Vorschlag ist ja, das erstma die Liste initialisiert werden muss. Dann muss ich ja auch noch alle Nase lang die temp. Variablen deklarieren um damit zu arbeiten. Wenn ich die nicht deklariere, dann komm ich ja nicht über das "MyList.Add()" hinaus. Danach muss ich dann auch noch mich zumindest um das Freigeben der Liste kümmern.
In etwa bin ich wieder bei +/- 0, ich muss weiterhin die Variablen deklarieren und ich muss weiterhin mich ums freigeben kümmern (auch wenn ein wenig einfacher nu). Ich finde, da lohnt sich das neuschreiben einer TVectorList Klasse noch nicht mal plus das umschreiben des bisherigen Codes für das Ergebnis.
Aber danke für den Denkanstoß!


MfG
- Thebe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz