AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zwei Objekte in einem oder zwei Try Finaly Blöcke?

Zwei Objekte in einem oder zwei Try Finaly Blöcke?

Ein Thema von Popov · begonnen am 15. Apr 2015 · letzter Beitrag vom 15. Apr 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Popov
(Gast)

n/a Beiträge
 
#1

Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 13:45
Ich hab mich schon immer gefragt wie andere hier das mit dem Try Finally Block machen. Guckt man sich fremden Code an, bekommt jedes Objekt oft seinen eigenen Block. Das habe ich mir irgendwann so abgeguckt und mache es auch:
Delphi-Quellcode:
  Bmp := TBitmap.Create;
  try
    { Hier gibt es keinen Code }
    sl := TStringList.Create;
    try
      { Es gibt nur hier Code }
      //Hier gibt es einen Fehler
    finally
      sl.Free;
    end;
    { Hier gibt es keinen Code }
  finally
    Bmp.Free;
  end;
Allerdings denke ich mir manchmal, dass es Quatsch ist. Denn wenn es im oberen Beispiel mittendrin ein Error gibt, unterscheidet das System nicht zwischen Bitmap und StringList Error. Zuerst geht es zum sl-Finally, dann zum Bmp-Finally. Warum also nicht gleich so?
Delphi-Quellcode:
var
  Bmp: TBitmap;
  sl: TStringList;
begin
  Bmp := TBitmap.Create;
  sl := TStringList.Create;
  try
    { Es gibt nur hier Code }
    //Hier gibt es einen Fehler
  finally
    sl.Free;
    Bmp.Free;
  end;
end;
Wie gesagt, ich sehe die obere Variante sehr oft, nur sehe ich keinen Sinn drin.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 13:51
Da ich mich nicht wiederholen will: http://forum.delphi-treff.de/index.p...verschachteln/
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 13:53
Deleted - war Quatsch.
Uli Gerhardt

Geändert von uligerhardt (15. Apr 2015 um 13:55 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:08
Werden Objekt-Variablen in Delphi nicht implizit mit nil initialisiert?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:09
DeddyH, gute Erklärung, aber das Beispiel ist leicht konstruiert. Sehe ich eigentlich wie du, aber das Beispiel entspricht nicht ganz meinem Beispiel oben. Auch die Bemerkung von uligerhardt war ok, ist aber nun weg. Konstruiert, weil ich hier nicht TBitmap mit TIniFile kombiniert habe, sondern TBitmap mit TStringList. Da kracht es nicht bei der Initialisierung. Bei TIniFile kann es auch bei Create krachen, im oberen Beispiel eher nicht.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:10
Beide Varianten sind Schrott, da der Finaly-Block nie erreicht wird, wenn es zum Beispiel in TBitmap.Create knallt.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#7

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:13
Werden Objekt-Variablen in Delphi nicht implizit mit nil initialisiert?
Nein, lokale Variablen liegen auf dem Stack und werden nicht automatisch initialisiert, Ausnahmen sind managed types wie strings, dynamische Arrays und Interfaces.


Beide Varianten sind Schrott, da der Finaly-Block nie erreicht wird, wenn es zum Beispiel in TBitmap.Create knallt.
Der Finally-Block muss auch nicht erreicht werden, wenn es in TBitmap.Create knallt, insofern also kein Schrott.

Ich persönlich mag zu viele Verschachtelungen nicht. Zwei sind noch ok, aber für mehr bevorzuge ich diese Variante:

Delphi-Quellcode:
var
  Bmp: TBitmap;
  sl: TStringList;
begin
  Bmp := nil;
  sl := nil;
  try
    Bmp := TBitmap.Create;
    sl := TStringList.Create;
    { Es gibt nur hier Code }
    //Hier gibt es einen Fehler
  finally
    sl.Free;
    Bmp.Free;
  end;
end;
oder
Delphi-Quellcode:
var
  Bmp: TBitmap;
  sl: TStringList;
begin
  sl := nil;
  Bmp := TBitmap.Create;
  try
    sl := TStringList.Create;
    { Es gibt nur hier Code }
    //Hier gibt es einen Fehler
  finally
    sl.Free;
    Bmp.Free;
  end;
end;

Geändert von SMO (15. Apr 2015 um 14:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:14
Wegen strom- bzw netzwerkausfall schreibe ich mit dem Handy und suche deshalb mal nicht frühere threads raus. Aber meine Meinung:

Try ... finally fuer myobject.free macht m.e. nur selten Sinn.
Erwartete Probleme wie io-acceptions sollte man natürlich h abfangen und behandeln.
Aber jedes .create mit Einem Try zu schützen bringt m.e. nichts.
Das Programm ist ab der stelle ohnehin in einem undefinierten und fehlerhaften Zustand und sollte neu gestartet (und repariert) werden oder was auch immer. Ob da im Speicher noch eine objektleiche liegt ist dann auch egal.

Wie gesagt: Fehler behandeln ist wichtig. Free in finally zu legen (ohne sonstige massnahmen) bringt m.e. nix.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:16
Na gut. Ich hab zwar noch nie erlebt, dass eine der oberen Klassen schon bei Create gekracht hat, aber anderseits soll es irgendwo auf der Welt mal kleine Hunde geregnet haben. Somit will ich nicht ausschließen, es mal vorkommen kann. Also die weiterhin erste Methode
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 14:17
Nimm doch mal einen FileStream und versuch den auf ein schreibgeschütztes Medium schreiben zu lassen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
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 12:57 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