Re: throw () in der Signatur?



Hallo,

Tibor Pausz wrote:
> Stefan Reuther <stefan.news@xxxxxxxx> wrote:
>>Wenn ich das wirklich *weiß*, dann ja. Sprich, wenn die Funktion klein
>>genug ist, dass ich sie überschauen kann.
>
> Also in dem Punkt stimmen wir überein.
>
>>Nur die meisten Funktionen sind eben komplizierter.
>
> Das ist mir bekannt und deshalb gibt es auch relativ wenig throw() im
> Code.

Gut, dann stimmen wir auch da überein.

>>(wer würde z.B. sofort daran denken, dass 's.c_str()' std::bad_alloc
>>werfen darf?)
>
> Wenn man sich mit std::string auseinander gesetzt hat, dann sollte man
> wissen, daß std::string::c_str() dynamisch Objekte erzeugen darf, die
> nur für diesen einen Aufruf gültig sind und der Zeiger nach jeder
> anderen Memberfunction von std::string ungültig ist. Allein aus diesem
> Grund sollte man wissen, was c_str() macht, weil man anderfalls einen
> ungültigen Zeiger benutzt.

Nun, es ist nicht jedermann offensichtlich, warum c_str() (eine
'const'- Memberfunktion) hinter den Kulissen etwas tun muss, das
zu Speicherallokation führt.

Aber ansonsten sind wir dann wieder dort, wo zumindest ich in den Thread
eingestiegen bin: es ist in C++ schlicht nicht praktikabel, *alle*
Ausnahmen zu spezifizieren, weil das einfach viel zu viele wären.

>>Das Core, das mir das Programm bei einer unpassenden Exception-
>>Spezifikation liefert, nützt mir normalerweise nichts.
>
> Darum geht es primär gar nicht sondern um die Tatsache, daß ein
> werfender Destruktor früher oder später dafür sorgt, daß unexpected()
> aufgerufen wird.

Hmmm. Guter Punkt.


Stefan

.



Relevant Pages