eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTry catch, prawidłowy sposób użyciaRe: Try catch, prawidłowy sposób użycia
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin1!goblin.stu.neva.ru!news.astraweb.com!border6.a.newsrouter.astr
    aweb.com!not-for-mail
    Date: Sat, 16 Jun 2012 22:08:27 +0100
    From: Bronek Kozicki <b...@s...net>
    Organization: (my opinions are just mine)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120428
    Thunderbird/12.0.1
    MIME-Version: 1.0
    Newsgroups: pl.comp.programming
    Subject: Re: Try catch, prawidłowy sposób użycia
    References: <jqfo4u$637$1@node2.news.atman.pl> <jqgjqf$2jr$1@inews.gazeta.pl>
    <s...@j...net> <jqgl1l$b49$1@inews.gazeta.pl>
    <a...@j...googlegroups.com>
    <jqib3a$cec$1@inews.gazeta.pl>
    In-Reply-To: <jqib3a$cec$1@inews.gazeta.pl>
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    Lines: 72
    Message-ID: <4fdcf5c9$0$3778$c3e8da3$63ee2bc3@news.astraweb.com>
    NNTP-Posting-Host: 40a036ce.news.astraweb.com
    X-Trace: DXC=ZRQ>mh2<ebJU8fT?_VL23KL?0kYOcDh@J9WTKl=fkkgC]]COj<c<ZVI2jP89H\`LSG0[`d89
    Qb@2JO3UOh[7o[jLedZV\DcgP8ILWnE8P5;kgJ
    Xref: news-archive.icm.edu.pl pl.comp.programming:197952
    [ ukryj nagłówki ]

    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)
    {}


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

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: