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?
Thema durchsuchen
Ansicht
Themen-Optionen

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 2 von 4     12 34      
BadenPower

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

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

  Alt 15. Apr 2015, 13:24
Der Finally-Block muss auch nicht erreicht werden, wenn es in TBitmap.Create knallt, insofern also kein Schrott.
Habe ich auch gerade bemerkt als ich auf dem Weg zum Kaffeholen war.

Und wir sprechen ja von "Finaly" und nicht von "Except".
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.

Geändert von BadenPower (15. Apr 2015 um 13:26 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

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

  Alt 15. Apr 2015, 13:33
DeddyH, du hast ja Recht. Nur habe ich im Eingangspost vergessen eine Einschränkung zu erwähnen: ich meinte die 08/15 Klassen ohne Parameter in Create, die zu einem Error führen können. Ich hab im Beispiel solche Klassen genommen, hab aber nicht erwähnt, dass es mit nur um die geht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

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

  Alt 15. Apr 2015, 13:40
Ich persönlich habe mir angewöhnt, stets die Varianten zu nehmen, die immer funktionieren. Neben den Ressourcenschutzblöcken sind das Dinge wie z.B. Arrays immer von Low() bis High() zu durchlaufen. Das hat den Vorteil, dass ich mir um solche Dinge wie "Kann das überhaupt im Konstruktor knallen bei dieser Klasse?" überhaupt keinen Kopf machen muss, sondern immer einen einheitlichen Stil verfolgen kann.
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 Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

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

  Alt 15. Apr 2015, 13:48
Ich persönlich habe mir angewöhnt, stets die Varianten zu nehmen, die immer funktionieren. Neben den Ressourcenschutzblöcken sind das Dinge wie z.B. Arrays immer von Low() bis High() zu durchlaufen. Das hat den Vorteil, dass ich mir um solche Dinge wie "Kann das überhaupt im Konstruktor knallen bei dieser Klasse?" überhaupt keinen Kopf machen muss, sondern immer einen einheitlichen Stil verfolgen kann.
Das unterschreibe ich mit

Es ist mir egal ob die aktuelle Implementierung einer Klasse beim Erzeugen eine Exception wirft oder nicht. Alle werden gleich behandelt und ich muss mir weniger einen Kopf um Speicherlecks machen.

Bei der konsequenten Verfolgung kann die Anwendung auch nicht kaputt gehen, da ja alles wieder so ist wie vor dem Aufruf (und da war die ja noch nicht kaputt).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#15

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

  Alt 15. Apr 2015, 13:48
Ich widerspreche dir nicht. Mache ich im Grunde auch. Aber wann man mal wieder eine Prozedur hat bei der man paar Objekte auf einmal bracht, dann wird der Code lang, noch bevor man losgelegt hat.
Delphi-Quellcode:
var
  Bmp1, Bmp2, Bmp3, Bmp4, Bmp5: TBitmap;
begin
  Bmp1 := TBitmap.Create;
  try
    Bmp2 := TBitmap.Create;
    try
      Bmp3 := TBitmap.Create;
      try
        Bmp4 := TBitmap.Create;
        try
          Bmp5 := TBitmap.Create;
          try
            //Hier tue was
          finally
            Bmp5.Free;
          end;
        finally
          Bmp4.Free;
        end;
      finally
        Bmp3.Free;
      end;
    finally
      Bmp2.Free;
    end;
  finally
    Bmp1.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

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

  Alt 15. Apr 2015, 13:51
Da würde ich mir eher Gedanken machen, ob sich das nicht in kleinere Portionen aufteilen lässt.
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 Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

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

  Alt 15. Apr 2015, 13:53
@Popov

Da reicht genau ein try finally Block aus.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#18

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

  Alt 15. Apr 2015, 13:59
Man muß auch nicht nur an den Constructor denken, sondern auch an den Destructor.

Delphi-Quellcode:
B := nil;
A := TMyClass.Create;
try
  B := TMyClass.Create;
  ...
finally
  A.Free; // wenn es hier knallt, dann hat man ein Leck
  B.Free;
end;
Lösungen:
* doch nicht zusammenfassen

oder
Delphi-Quellcode:
finally
  B.Free;
  A.Free; // wenn es hier knallt, dann ist es egal, aber es darf natürlich nicht schon in B.Free knallen
end;
oder so
Delphi-Quellcode:
finally
  try
    A.Free;
  finally
    B.Free;
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

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

  Alt 15. Apr 2015, 14:06
@himitsu

Das Erzeugen einer Klasse kann in die Hose gehen und ein völlig korrektes Verhalten der Klasse sein. Eine Exception im destructor ist immer ein absolutes Fehlverhalten der Klasse. Somit gehört dein Beispiel in die Kategorie "paranoide Programmierung".
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

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

  Alt 15. Apr 2015, 14:19
Jetzt will ich doch nochmal einhaken (kann auch wieder am Rechner schreiben):

Delphi-Quellcode:
B := nil;
 A := TMyClass.Create;
try
   B := TMyClass.Create;
   EuroÜberweisenVonStahliZuHimi(B.Value);
finally
   A.Free; // wenn es hier knallt, dann hat man ein Leck
   B.Free;
end;
Wenn Du als Nutzer obiges Programm ausführst und B.Create knallt - warum auch immer - wirst Du mit dem Programm nicht glücklich werden.
Ob da noch Speicher allociert ist oder nicht, wäre da nebensächlich.

Du erfährst als Nutzer nicht, dass die Überweisung nicht funktioniert hat.
Ok, es wird kein Speicher verschwendet aber das ist doch sowas von egal.

Besser wäre, wenn es eine Fehlermeldung gibt. Entweder eine Schutzverletzung oder eine nette Erklärung wie "Die Überweisung konnte nicht durchgeführt werden!".
In jedem Fall muss die Software gefixt (oder einer neue Version verkauft ) werden.

Liege ich da so falsch mit der Ansicht?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 19:07 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