AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt TObject Speicherplatz wieder frei ?

Ein Thema von Hansa · begonnen am 19. Aug 2005 · letzter Beitrag vom 24. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 20. Aug 2005, 02:59
Sag mal Hansa, was ist den nmit dir los? Du programmierst doch schon eine ganze Weile und jetzt solche Fragen?

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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 23. Aug 2005, 19:08
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)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 23. Aug 2005, 19:10
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 23. Aug 2005, 19:22
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 23. Aug 2005, 19:25
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 24. Aug 2005, 01:38
Es sieht so aus, daß sogar der Vorfahre überflüssig ist ! Also OOP pur. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 24. Aug 2005, 02:36
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))
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 24. Aug 2005, 02:41
Jupp, war, glaube ich, irgendwie im Zusammenhang mit meinem Klassen-Tutorial oder so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz