Zitat von
Luckie:
Der Speicher wird von Windows wieder freigegeben. Es ist zwar kein sehr schöner Programmierstil andere hinter sich aufräumen zu lassen, aber das ist nicht das Problem. Das eigentliche Problem ist, dass die Referenzzähler von geladenen DLLs nicht dekrementiert werden und Windows diese dann nicht aus dem Speicher schmeissen kann, wenn sie nicht mehr benötigt werden.
Jein. Unter NT-Systemen mag diese Aussage stimmen. Ältere Systeme werden da nicht ganz so gründlich sauber machen.
Zitat von
Luckie:
Schlechten Programmierstil aufgrund von Unzulänglichkeiten der Entwicklungsumgebung vorzuziehen, finde ich falsch. Lieber sauber programmieren und die paar nötigen Änderungen von Hand in der Projektdatei vornehmen.
Seh ich auch so.
Delphi-Quellcode:
label
Ende;
begin
Application.CreateForm(TPassWort, Passwort); // Wenn PWD falsch, dann wird Application.Terminate aufgerufen
if Application.Terminated then
goto Ende; // wir sind fertig
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
...
Application.Run;
Ende:
end;
Hier ein Label zu verwenden ist schon ziemlich strange und lässt wie Luckie schon sagte auf schlechten Programmierstil schließen.
Warum nicht so:
Delphi-Quellcode:
Application.Initialize;
Application.CreateForm(TPassWort, Passwort);
if (Passwort <> nil) then
begin
if (Passwort.Correct) then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end;
end;
oder so:
Delphi-Quellcode:
begin
Application.Initialize;
Application.CreateForm(TPassWort, Passwort);
Application.Run;
end;
procedure TPassWort.Login_Correct_Click(Sender: TObject);
begin
if (Self.Correct) then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
end
else
Self.Close
end;