[ X Files @ 10.02.2005. 12:53 ] @
Pozdrav, Primeri koji sam dole naveo (3 komada) su sa C++Builder6, a druga dva mi daju neocekivane rezultate. Da li ima neki dobrovoljac da stvar isproba i na drugim kompajlerima da uporedimo rezultate. Bilo bi dobro i neko sa Delphi-jem, bas me zanima! Nece biti tesko preneti kod, vrlo je jednostavno. O cemu se radi. C++ po standardu nema 'finally' komandu, ali je ipak svi kao ekstenziju isporucuju uz kompajler. Dakle, 'finally' bi treralo da *u svakom slucaju izvrsi blok* bez obzira sta se desilo u 'try': Code: void __fastcall TForm1::Button1Click(TObject *Sender) { try { return; } __finally { ShowMessage( "Izvrseno bez obzira na return!" ); } } Ali: void __fastcall TForm1::Button2Click(TObject *Sender) { try { try { return; } catch ( ... ) { } } __finally { ShowMessage( "Nije izvrseno?!" ); } } Takodje: void __fastcall TForm1::Button3Click(TObject *Sender) { try { try { // proizvedite neki izuzetak int x = StrToInt( "nije_broj" ); } catch ( ... ) { return; } } __finally { ShowMessage( "Nije izvrseno?!" ); } } Desilo se da '__finally' nije izvrsen. U C++ se koristi cuvena RAII tehnika da se osigura 'čišćenje' ako nesto krene lose - to znam, ali me zanima da li je i kod drugih kompajlera stvar kao u ovim primerima. [Ovu poruku je menjao X Files dana 01.11.2012. u 19:33 GMT+1] |