Re: throw () in der Signatur?
- From: Rainer Weikusat <rainer.weikusat@xxxxxxxxx>
- Date: Thu, 11 Aug 2005 11:10:32 +0200
Stephan Menzel <stephan-menzel@xxxxxx> writes:
> Florian Weimer wrote:
>>> Und siehe da:
>>> Die Signaturen sind identisch. Was auch damit zu erklären wäre, dass man
>>> nicht nach Exception Specifier überladen kann.
>>
>> Das ist zwar notwendig, aber nicht hinreichend für ABI-Kompatibilität.
>
> Eben. Leider.
> Wie ja bei Datenmembers auch, die ja ebenfalls die Methodensignatr nicht
> aendern, ABI Kompatibilitaet aber kaputt machen.
Eine C++-Klasse ist intern nichts anderes als eine C-struct und das
ist ein Ding, bei dem 'data members' sequentiell unter
Beruecksichtigung eventueller alignment-Anforderungen im Speicher
liegen. Das heisst, das Routinen, die direkt auf data members
zugreifen, der offsets durch die Aenderung nicht beeinflusst wurden,
weiter "funktionieren". Auch Code, der die Instanzen dynamisch
alloziert, kann weiterhin benutzt werden, falls die erste Bedingung
zutrifft. Was natuerlich nicht geht, sind statische Allokation und
auto-Variablen, weil in beiden Faellen die Groesse des zu
reservierenden Bereichs zum Uebersetzungszeitpunkt bekannt sein muss.
Falls man das als Problem ansieht, kann man es (Coplien) so loesen,
dass man "extern" nur Handle-Klassen zur Verfuegung stellt, die auf
vollstaendig eingekapselte interne Datenobjekte zugreifen.
Das ist alles kein Hexenwerk und falls man C++ tatsaechlich benutzt,
anstatt es nur als amuesantes Spielzeug anzusehen, dann sollte man das
wissen.
.
- Follow-Ups:
- Re: throw () in der Signatur?
- From: Stephan Menzel
- Re: throw () in der Signatur?
- References:
- Re: throw () in der Signatur?
- From: Daniel Albuschat
- Re: throw () in der Signatur?
- From: Florian Weimer
- Re: throw () in der Signatur?
- From: Stephan Menzel
- Re: throw () in der Signatur?
- Prev by Date: Re: throw () in der Signatur?
- Next by Date: Re: throw () in der Signatur?
- Previous by thread: Re: throw () in der Signatur?
- Next by thread: Re: throw () in der Signatur?
- Index(es):
Relevant Pages
|
Loading