finally kulcsszó értelmezése

 ( pelz | 2008. május 9., péntek - 23:12 )

Sziasztok!

Ha van egy ilyen felépítésű kivétel kezelésem, akkor ugye a "finally" rész abban az esetben kapja meg a vezérlést, ha a "try" blokk rendesen végrehajtódott. Tehát, ha nem volt kivétel.

  try {
  ....
  }
  catch (...) {
  ...
  }
  finally {
  ...
  }

Az a kérdés, hogy jól értelmezem-e, vagy sem. Ha nem, mi a pontos magyarázat?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

minden esetben

ha az kéne hogy amikor a try lefutott, akkor simán beírnád a try végére nem? :)

A finally-nak pont az szokott az értelme lenni, hogy minden esetben lefut, azaz a try { } blokkban akár keletkezik kivétel, akár anélkül fut le. És a kivételkezelő kód után fut le:

Ha a catch block továbbdobná a kivételt, de a finallyban van egy return kifejezés, akkor az utóbbi érvényesül.

--
The Net is indeed vast and infinite...
http://gablog.eu

Nem, annak semmi értelme nem lenne, ha úgy lenne, mert akkor simán a try blokk végére írva azt a részt ugyan azt az eredményt kapnád.

Szóval a finally minden esetben lefut, akkor is, hogy a try blokk végigfutott, és akkor is ha elkapott egy kivételt, sőt még akkor is, ha a catch blokkból tovább dobsz egy kivételt, vagy ha return van benne.

A ‘finally’ ág akkor is végrehajtódik, ha a try szakaszban Exception dobódik fel, és akkor is, ha nem. A ‘finally’ nem szedi le a hibát, a hiba attól feldobva marad, a finally blokkból kilépve újra érvényre jut, és visszatér a hívás helyére.

Nekünk ezt tanították.

Apple MacBook C2D 2.2Ghz 2x1G Intel X3100

Köszönöm a magyarázatokat! Most már világos.

Jó, hogy megkérdeztem, mert különben félremagyaráztam volna a programot.

amugy ez milyen nyelven kellene mukodjon? elsore azt hittem hogy c++, de finally kulcsszorol se a g++, se az ISO/IEC 14882 (jelenleg ervenyes c++ szabvany) nem tud.

C# -ban tuti. :)

http://www.oreillynet.com/pub/a/network/2003/05/05/cpluspocketref.html

"In addition to catch blocks, Java allows a finally block to be defined. finally does not exist in C++."

Mertugye a C# alapjául a Java és C++ szolgált.

Apple MacBook C2D 2.2Ghz 2x1G Intel X3100

Talált, süllyedt!

Egyébként van egy Visual C++ könyvem, ami egy táblázatban a "finally" kulcsszót is felsorolja. De a könyvben egyetlen példát nem találtam, ahol azt használná.

Stroustrup könyvében a tárgymutató részben is megtaláltam. Az adott oldalt, amire hivatkozik, végigolvastam, de nem fedeztem fel a kulcsszót.