![]() |
Problem mit Klasse (wurde Klasse initialisiert?)
Hallo,
ich habe folgenden Quellcode:
Delphi-Quellcode:
Nun sagt Delphi folgende Warnung: [DCC Warnung] Ugebäude.pas(40): W1036 Variable 'ini' ist möglicherweise nicht initialisiert worden
try
ini:=Tinifile.Create(FPfad+'Gebäude.ini'); ini.WriteInteger('ID','Gebäude','1'); finally ini.Free; end; Wie könnte ich in diesem Zusammenhang meinen Quellcode verbessern? Danke! |
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Delphi-Quellcode:
ini:=Tinifile.Create(FPfad+'Gebäude.ini');
try ini.WriteInteger('ID','Gebäude','1'); finally ini.Free; end; |
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Dann werden aber Fehler beim Erzeugen der Ini nicht mehr abgefangen
|
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Welche Fehler sollten dort denn auftreten?
Ein Konstruktur ist so gestaltet, des er keinerlei Operationen ausführt, die zu einer Exception führen können. Ausgenommen schwere Korken, wie Speicherprobleme OS-Exceptions usw. Die wird man aber in einem geregelten Betrieb eh nicht abfangen können. |
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Es ist eher andersrum und jetzt mal auf alle Klassen bezogen....
Richtig: siehe Meflin Falsch: Was passiert hier, wenn im Constuctor eine Exception auftreten würde?
Delphi-Quellcode:
Genau, der Constructor räumt den Speicher auf und weißt nix der Variable "ini" zu ... also "ini" ist undefiniert und enthält sonstwelche Werte.
try
ini := Tinifile.Create(FPfad + 'Gebäude.ini'); ... finally ini.Free; end; Nun leitet diese Exception die Programmausführung in den Finally-Block, wo ini.Free mit irgendwas in "ini" ein nicht existierendes Objekt freigeben will, was zu nocheiner Exception oder Schlimmeren führt. PS: der Compiler bemeckert hier zurecht ein nicht initialisiertes "ini" |
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Zitat:
|
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Wenn der Konstruktor wirklich nil zurückgibt, sollte das Free aber auch nicht zum Fehler führen.
|
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Nicht ganz ....NIL liefert der dann nicht zurück ... er macht das, was jede andere Funktion auch macht, wenn sie durch eine Exception beendet wurde ... die gibt garkeinen Rückgabewert zurück und die Variable (hier "ini" bleibt unverändert.
Und wie wir alle wissen (sollten), wird eine Objektvariable nicht automatisch initialisiert (so wie z.B. die Strings) und kann sonstwelche zufälligen Werte enthalten. |
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Zitat:
|
Re: Problem mit Klasse (wurde Klasse initialisiert?)
Wenn z.B. jemand versucht aus meiner Klasse ein Objekt zu erstellen und dazu "falsche" Parameter übergibt, dann werfe ich im Constructor eine Exception und fertig.
Ebenso, wenn man z.B. einen FileStream erstellt und kein Zugriff auf die Datei besteht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr. |
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 by Thomas Breitkreuz