Odpověď na názor

Odpovídáte na názor ke článku SEH v Linuxu (C++).

  • 6. 9. 2012 6:25

    Quake (neregistrovaný)

    Nevim proc nejde to, co jde napr. v Delphi:

    procedure Test;
    var i, a, b: integer;
    L: TStringList;
    begin
    L := TStringList.Create; // alokace pameti - vytvoreni instance
    try
    L.Append('ahoj'); // pridani stringu do string listu
    a := 1;
    b := 0;
    i := a div b; // exception - deleni nulou (div je celociselne deleni)
    bla_bla_bla; // sem se to uz nedostane !!!
    finally
    L.Free; // uvolneni pameti - provede se vzdy
    end;
    end;

    Nebo s osetrenim exception :

    procedure Test;
    var i, a, b: integer;
    L: TStringList;
    chyba: boolean;
    begin
    chyba := false;
    L := TStringList.Create; // alokace - vytvoreni objektu
    try
    L.Append('ahoj'); // pridani stringu do string listu
    a := 1;
    b := 0;
    try
    i := a div b; // exception - deleni nulou
    exception
    chyba := true; // byla chyba
    end;
    bla_bla_bla; // sem se to dostane !!!
    finally
    L.Free; // uvolneni pameti - provede se vzdy
    end;
    end;

    Blok mezi finally ... end; se provadi i kdyz vznikla exception. Je to naprosto elegantni a bezpecne. Nemam zadne auto_ptr jako v C++ a nic neresim. Pisu pouze try ... finally ... end;. Mohu vyjimku poslat pomoci klicoveho slova raise ven z procedury, osetruji ruzne typy vyjimek podle typu. Je to mnohem prehlednejsi a resi to rovnou kompilator.