eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTry catch, prawidłowy sposób użycia
Ilość wypowiedzi w tym wątku: 32

  • 31. Data: 2012-06-06 02:28:49
    Temat: Re: Try catch, prawidłowy sposób użycia
    Od: n...@m...invalid

    W dniu 5.06.2012 r. 17:15, AK pisze:
    > Użytkownik <n...@m...invalid> napisał:
    >
    >> W dniu 5.06.2012 r. 10:16, AK pisze:
    >>> Użytkownik <n...@m...invalid> napisał w wiadomości:
    >>>
    >>>>> To kwestia opcji/kompilatora ?
    >>>> Tak. Ściśle rzecz biorąc, w C++ to UB.
    >>>
    >>> Nieprawda !
    >> W rzeczy samej.
    >
    > Dopowiem: zaostrzenie (!) dyskusji :) z mej strony mialo na celu
    > _wylacznie_ wbicie do glowy szczegolnie mlodym adeptom C++ w/w
    > faktu.
    Dziękuję w imieniu adeptów za naukę. :-)

    Myślami byłem w okolicach securitologii (jest taka dyscyplina!) i Null
    Pointer Dereference. Choć to wbrew runtime'owi i modelowi pamięci, to
    wskaźnik 0 tak naprawdę może być wskaźnikiem na realne dane lub kod na
    x86. Placement new można użyć na nullptr -- to niewątpliwie jest UB,
    ale milcząco ignorowane.
    <http://ideone.com/XIcw1>

    > Po prostu zbyt czesto widze kod upstrzony tak:
    >
    > if ( ptr != NULL ) { delete ptr; }
    >
    > zamiast:
    >
    > delete ptr, ptr = NULL;
    Zgoda. Doceniam dbałość o zwięzłość.


  • 32. Data: 2012-06-16 23:08:27
    Temat: Re: Try catch, prawidłowy sposób użycia
    Od: Bronek Kozicki <b...@s...net>

    On 04/06/2012 13:52, AK wrote:
    > Użytkownik "Maciej Sobczak" <s...@g...com> napisał:
    >
    >> Ten kod może być zarówno dobry jak i niedobry, zależnie od kontekstu.
    >
    > Ten kod (A) jest zawsze zly.

    tylko przy założeniu że "rollback" jest w sekcji catch. A mógłby być w
    destruktorze, np:


    class Connection
    {
    friend class Transaction;

    void begin();
    void rollback();
    void commit();
    void execute(const Statement&);
    // . . .
    };

    class Transaction
    {
    Connection& conn_;
    bool active_;

    public
    Transaction(Connection& c) conn_(c), active_(false)
    {}

    ~Transaction()
    {
    if (active_)
    conn_.rollback();
    }

    void commit()
    {
    if (active_)
    {
    conn_.commit();
    active_ = false;
    }
    }

    void execute(const Statement& s)
    {
    if (!active_)
    {
    conn_.begin();
    active_ = true;
    }
    conn_.execute(s);
    }
    };



    try
    {
    Transaction t(c);
    t.execute(s1);
    t.execute(s2);
    t.commit();
    t.execute(s3);
    t.commit();
    }
    catch (Error e)
    {}


strony : 1 ... 3 . [ 4 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: