a jak to dělají, když v destruktoru vyhodit výjimku nesmějí. Jak jinak to dělají. Jediný co můžete s takovou výjimkou udělat je, že jí vyhodíte, nebo zaignorujete.
A co takhle dát to jinam, než do destruktoru. Pokud tu výjimku nemůžu ignorovat, tak to nesmí být v destruktoru, protože tam se o ní občas nedovím ať dělám, co dělám.
Když to začnete řešit takhle, narušujete koncept RAII. Protože vyžadujete explicitní uzavření prostředku, což je proti duchu RAII. Co když na to zapomenete?
A jak to uvnitř objektu poznáte, že na tom nesejde? A co když na tom sejde?
To samozřejmě poznám už ve chvíli, kdy ten kód píšu. Pokud na tom sejde, tak si nemůžu dovolit ani
A co když píšete knihovní objekt? Kde to jestli na tom sejde nebo nesejde záleží na tom, kdo to bude používat? A co když přitom nechcete narušit koncept RAII? Napíšete do dokumentace: "Vždycky na konci bloku zavolat JHS.close(), jinak vám to nebude fungovat". Už vidím tuny kódu, kde na to lidi zapomenou.
[/quote]
Zalogování chyby je pro vývojáře a ne pro uživatele.
Co třeba logovat chyby pro helpdesk?
Výjimky se nesmí používat k normálnímu běhu kódu.
To jsem ani nikde nepsal. Já psal o případu, že se někdo jako vy pokusí v destruktoru uložit při chybě soubor pomocí vaší knihovny. V téhle chvíli se vaše knihovna s vaším bufferem bude tvářit jako že je všechno ok, i když uloží neúplný soubor.
A to jenom pokud to selže výjimkou. Ten způsob řeší opravdu jen situaci, kdy něco selže dvakrát za sebou. Nebo mi napište, jak byste to řešil vaším explicitním zavíráním, kdy nemůžete v destruktoru vyhodit výjimku. Co když tedy ten flush selže? Co dál?
...nebo když používam custom alokátory (které STL neumí - i když vám kdejaký jouda bude tvrdit, že ano).
Neumí to STL, nebo Novák?
To je právě to, STL custom alokátory jsou velmi nepraktické a nepoužitelné. Bohužel jsou součástí standardu.
Aha, takže až vydáte tu Vaši knihovnu, tak celý business zahodí STL a začně to používat, protože všichni pojídači koláčů, kteří se někde na akademické půdě naučili STL, budou mít konečně mnohem rychlejší a použitelnějsí standardní knihovnu do C++ .
troll alert