Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Warum macht ein TForm.Close nicht NIL

  Alt 8. Mai 2008, 12:29
Zitat von Eurowig:
In der Delpi Hilfe steh:
Mit Release können Sie das Formular aus dem Speicher entfernen.

Dieser Info habe ich auch bisher Glauben gescheckt.
Ja und? Das wird doch auch erfüllt.

Deine Variable ist nur eine Referenz auf den Speicher des Formulars. Du bist wirklich der Meinung, dass Delphi einen riesigen Verwaltungsaufwand treibt um im folgenden Beispiel alle diese Variablen auf NIL zu setzen, weil sie alle auf das eine Formular verweist?

Delphi-Quellcode:
var
  Form1, Form2, Form3, Form4, Form5, FormWhatever: TForm;
begin
  Form1 := TForm.Create(nil); // eine Instanz
  Form2 := Form1;
  Form3 := Form1;
  Form4 := Form1;
  Form5 := Form1;
  FormWhatever := Form1;

  // Nun zeigen alle diese Variablen auf dieses eine Formular.

  Form1.Release; // Formular freigeben

  // Nun ist der vom Formular belegte Speicher freigegeben. Aber alle Variablen von Form1 bis FormWhatever
  // enthalten aber immernoch die Adresse die das Formular hatte. Nur der Speicher an der Adresse ist wieder
  // verfügbar.

  // Irgendwelche Zugriffe auf Form1 bis FormWhatever sind tödlich!

  // Delphi müsste einen riesigen Verwaltungsaufwand treiben um alle Variablen auf NIL zu setzen. Schon allein
  // folgendes setzt (natürlich) nicht gleich alle Variablen auf nil:

  Form1 := nil;

  // Hiernach sind Form2 bis FormWhatever noch immer mit der alten Adresse gefüllt.
Anderes Beispiel:

Ein Freund von dir zieht um und hat eine neue Adresse. Du schreibst seine neue Adresse in dein Adressbuch, aber trotzdem sind nicht automatisch alle anderen Stellen wo die Adresse vermerkt wurde mit geändert: Outlook Buch, Telefon, etc.

Die Variablen die die Instanz der Form aufnehmen sind an unterschiedlicher Stelle im Speicher und sind jeder für sich. Diese Variablen verweisen nur an eine Stelle mit der Form Instanz.
  Mit Zitat antworten Zitat