AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu .free bei Klassen

Ein Thema von Wuaegner · begonnen am 20. Jul 2005 · letzter Beitrag vom 20. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#1

Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:25
Ich habe eine Klasse TStringManager, die unter anderem das hier enthält:
Delphi-Quellcode:
type
  TStringManager = class(TObject) // Kapselt
  private // Stringverarbeitung
   FNummernListe : TStringlist; // Liste aller Nummern
   FOrteListe: TStringList;
   FDatumsListe: TStringList; // Liste aller Daten
   
   procedure Initialize; // Listen werden erstellt
   procedure Close;
Initialize erzeugt die Listen, z.B FNummernListe:= TStringList.Create;
In der Prozedur Close; wollte ich nich diese Listen wieder freigeben mit FNummernListe.Free usw.

Im OnCreate meiner Form wird StrMg:= TStringManager.Create; aufgerufen und im OnClose meiner Form:
Delphi-Quellcode:
StrMg.Close; // <== Ist das hier nötig, die Listen innerhalb der Klasse zu löschen oder
        StrMg.Free; // reicht diese Zeile ?
Lasse ich StrMg.Close nämlich weg geht es ohne Fehlermeldung, mit der Zeile kommt eine AV.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:27
Tu dein Zeug in den Constructor und den Destructor, dann hast du wenigstens was davon und musst nicht ewig oft mit diesen sinnlosen Extramethoden rumfummeln.
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:29
Kannst du posten wie das dann aussähe?
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:32
Delphi-Quellcode:
type
  TStringManager = class
  private
    {Felder}
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TStringManager.Create;
begin
  // Felder erstellen
  // also der Initialize-Code
end;

destructor TStringManager.Destroy;
begin
  // der Close-Code
  inherited;
end;
Das sollte man als OOPer aber wissen.
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:33
Habe noch nicht viel Erfahrung mit OOP , drum danke.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:55
Ok habe es jetzt so gemacht, das Problem besteht aber weiterhin.
Muss ich im destructor die einzelnen Listen ".free" en oder nicht? Wenn ich es mache kommt eine AV, wenn nicht geht es.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 18:58
Wurden die Listen vielleicht schon vorher freigegeben, oder verwendest du vielleicht sogar ein nicht instanziiertes Objekt? Anders ist dieses Verhalten nicht erklärbar.

Tip: Statt .Free lieber FreeAndNil nehmen Tut nix anderes, aber ein erneutes Free dafür nix mehr, also keine AVs (falls es daran lag)
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 19:08
Verwende jetzt FreeAndNil() aber der Fehler kommt immernoch. Es muss also daran liegen
Zitat:
ein nicht instanziiertes Objekt?
Ich erzeuge die Listen mit liste:= TStringList.Create; , füge mit Add() neue Items hinzu und lösche wieder welche usw. , muss ich noch etwas beachten?
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#9

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 19:09
Zitat von Dax:
Tip: Statt .Free lieber FreeAndNil nehmen Tut nix anderes, aber ein erneutes Free dafür nix mehr, also keine AVs (falls es daran lag)
Naja, der Unterschied von FreeAndNil zu .Free ist ja, dass bei FreeAndNil das Objekt freigegeben und die Zeiger auf Nil gesetzt werden (wie der Name schon sagt). Also entspricht FreeAndNil folgemdem Code:
Delphi-Quellcode:
MyObj.Free;
MyObj := nil;
Ob man jetzt die entsprechende Prozedur nutzt oder es selbst macht (oder den Destructor verwendet) bleibt jedem selbst überlaseen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Frage zu .free bei Klassen

  Alt 20. Jul 2005, 19:10
Ein bisschen mehr Code könnte ein bisschen mehr helfen Oder ist dein Projekt fürs Militär?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:54 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