Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gibt TObject Speicherplatz wieder frei ? (https://www.delphipraxis.net/51833-gibt-tobject-speicherplatz-wieder-frei.html)

Luckie 20. Aug 2005 01:59

Re: Gibt TObject Speicherplatz wieder frei ?
 
Sag mal Hansa, was ist den nmit dir los? Du programmierst doch schon eine ganze Weile und jetzt solche Fragen? :shock:

Also, Destroy sollte man nie direkt aufrufen, sondern nur über die Methode Free, da Free vorher prüft, ob das Objekt nicht nil ist. Erzeugst du in deiner Klasse weitere Instanzen, überschreibst du Destroy in deiner Klasse, gibst aber die Instanz der Klasse selber mit Free frei.

Delphi-Quellcode:
type
  TExample = class(TObject)
    private
      sl: TStringList;
    public
      Constructor Create;
      Destructor Destroy; override;
  end;

Constructor TExample.Create;
begin
  inherited;
  sl := TStringList.Create;
end;

Destructor TExample.Destroy;
begin
  ShowMessage('Kuckuck');
  sl.Free;
  inherited Destroy;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyExample: TExample;
begin
  MyExample := TExample.Create;
  try
  finally
    MyExample.Free;
  end;
end;
So. Free wirft die Instanze aus dem Speicher, aber der Zeiger wird nicht auf nil gesetzt. So das nach dem Free ein Test auf nil immer noch True ergibt. Entweder man setzt den Zeiger nun von Hand auf nil oder man läßt es die VCL machen und nutzt die Prozedur FreeAndNil.

Ich verstehe jetzt aber nicht so ganz dein Problem, denn das kann es ja nicht gewesen sein, denn das hast du ja hoffentlich schon drauf, ansonsten wüßte ich nicht, wie du bisher mit deinen Programmen Geld verdient hast. :gruebel:

Hansa 23. Aug 2005 18:08

Re: Gibt TObject Speicherplatz wieder frei ?
 
Das Thema interessiert wirklich nur am Rande. 8) Ich will die Parameter in der Prozedur ersetzen. Reicht da nicht ein bloßes free ? Es geht um keine komplexen Strukturen ! Ich will z.B. so was :

Delphi-Quellcode:
procedure SchreibeDatei (ID_KUNDE,
                         ID_ART,
                         Ges integer;
                         EKpreis,
                         VKpreis : real;
                         gratis,
                         zurueck : boolean);
ersetzen mit TObject-Feldern. Das ist auf Dauer übersichtlicher. 8)

Luckie 23. Aug 2005 18:10

Re: Gibt TObject Speicherplatz wieder frei ?
 
Die Felder vom Typ TObejct müssen ja irgendwo erzeuugt werden und wen ndu keine Speicherlecks produzieren willst, musst du sie auch wieder freigeben. Psote doch mal Code, wie du dir das konkret vorstellst.

Hansa 23. Aug 2005 18:22

Re: Gibt TObject Speicherplatz wieder frei ?
 
Wie gesagt, ich will lediglich von der ellenlangen Prozedur-Parameterliste weg ! Hier ist das (stark reduzierte) TObject :

Delphi-Quellcode:
TStatSpeichern = class(TObject)
  monat,
  jahr,
  menge : smallint;
...
  public
    procedure SchreibeStat (KuNr : integer);
end;
Hier ist die Prozedur :

Delphi-Quellcode:
procedure TStatSpeichern.SchreibeStat (KuNr : integer);
begin
  with EingDM.StatSP do begin
    ParamByName ('MONAT').AsInteger := monat;
    ParamByName ('JAHR').AsInteger := jahr;
    ParamByName ('MENGE').AsInteger := Menge;
...
    ExecProc;
  end;
end;
Das ist zwar jetzt eine SQL Stored Procedure tut aber nichts zur Sache. Allerdings bin ich gerade am überlegen, ob ein Create nicht etwa sogar überflüssig ist. :gruebel:

Luckie 23. Aug 2005 18:25

Re: Gibt TObject Speicherplatz wieder frei ?
 
Das ist nichts weiter als eine Klasse mit TObject als Vorfahre. Und um sie benutzen zu können, wirst du eine Instanz erstellen müssen und die musst du wieder aus dem Speicher entfernen. Wie, das haben wir dir schon erklärt.

Hansa 24. Aug 2005 00:38

Re: Gibt TObject Speicherplatz wieder frei ?
 
Es sieht so aus, daß sogar der Vorfahre überflüssig ist ! Also OOP pur. 8)

dizzy 24. Aug 2005 01:36

Re: Gibt TObject Speicherplatz wieder frei ?
 
TObject ist immer (erster) Vorfahre. Ob du es nun explizit angibst oder nicht ist völlig unerheblich. (Hatten wir das nicht auch schon mal vor einiger Zeit diskutiert? 8))

Luckie 24. Aug 2005 01:41

Re: Gibt TObject Speicherplatz wieder frei ?
 
Jupp, war, glaube ich, irgendwie im Zusammenhang mit meinem Klassen-Tutorial oder so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Seite 2 von 2     12   

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