30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

3 constructor of MyFastObject<br />

4 new o f NonVolatileObject c a l l e d with s i z e 16<br />

5 constructor of MyNonVolatileObject<br />

6 d e s t r u c t o r of MyFastObject<br />

7 d e l e t e o f FastAccessibleObject c a l l e d<br />

8 d e s t r u c t o r of MyNonVolatileObject<br />

9 d e l e t e o f NonVolatileObject c a l l e d<br />

10 c r e a t i n g arrays of o b j e c t s . . .<br />

11 new [ ] of FastAccessibleObject c a l l e d with s i z e 40<br />

12 constructor of MyFastObject<br />

13 constructor of MyFastObject<br />

14 constructor of MyFastObject<br />

15 new [ ] of NonVolatileObject c a l l e d with s i z e 52<br />

16 constructor of MyNonVolatileObject<br />

17 constructor of MyNonVolatileObject<br />

18 constructor of MyNonVolatileObject<br />

19 d e s t r u c t o r of MyFastObject<br />

20 d e s t r u c t o r of MyFastObject<br />

21 d e s t r u c t o r of MyFastObject<br />

22 d e l e t e [ ] of FastAccessibleObject c a l l e d<br />

23 d e s t r u c t o r of MyNonVolatileObject<br />

24 d e s t r u c t o r of MyNonVolatileObject<br />

25 d e s t r u c t o r of MyNonVolatileObject<br />

26 d e l e t e [ ] of NonVolatileObject c a l l e d<br />

27 ∗∗∗∗∗ and now the catastrophe ! ! ! ! ! ! ∗ ∗ ∗ ∗ ∗<br />

28 new [ ] of FastAccessibleObject c a l l e d with s i z e 40<br />

29 constructor of MyFastObject<br />

30 constructor of MyFastObject<br />

31 constructor of MyFastObject<br />

32 new [ ] of NonVolatileObject c a l l e d with s i z e 52<br />

33 constructor of MyNonVolatileObject<br />

34 constructor of MyNonVolatileObject<br />

35 constructor of MyNonVolatileObject<br />

36 d e s t r u c t o r of MyFastObject<br />

37 d e l e t e o f FastAccessibleObject c a l l e d<br />

38 d e s t r u c t o r of MyNonVolatileObject<br />

39 d e l e t e o f NonVolatileObject c a l l e d<br />

12.3 Speicherverwaltung 373<br />

Die e<strong>in</strong>zige wirkliche Besonderheit beim Anlegen von Arrays, die im Output<br />

augenfällig wird, ist die angeforderte Größe des Speicherblocks: In unserem<br />

Fall ist der angeforderte Speicherblock für e<strong>in</strong> Array nämlich <strong>in</strong> beiden Fällen<br />

um 4 Bytes größer als erwartet! Man sieht z.B., dass für e<strong>in</strong> MyFastObject<br />

12 Bytes angefordert werden, für 3 Objekte dieses Typs allerd<strong>in</strong>gs mitnichten<br />

36 Bytes, sondern 40! Ganz gleich verhält es sich bei MyNonVolatileObject.<br />

Das ist darauf zurückzuführen, dass im angeforderten Block auch adm<strong>in</strong>istrative<br />

Daten abgelegt werden, die allerd<strong>in</strong>gs für die verschiedenen Systeme<br />

weder <strong>in</strong> ihrer Größe noch <strong>in</strong> ihrem Inhalt standardisiert und daher den Entwicklern<br />

nicht explizit zugänglich s<strong>in</strong>d.<br />

Bewusst wurde <strong>in</strong> das Programm <strong>in</strong> den Zeilen 286–293 zu Demonstrationszwecken<br />

auch e<strong>in</strong>e absolute Katastrophe e<strong>in</strong>gebaut, die furchtbare Folgen<br />

hat. Es werden dort nämlich Arrays mittels new[] angelegt. Diese werden<br />

allerd<strong>in</strong>gs schlimmerweise nicht korrekt mit delete[], sondern nur mit<br />

delete wieder freigegeben. Das wahre Ausmaß dieses Harakiri-Konstrukts<br />

wird deutlich, wenn man sich die Zeilen 27–39 des Outputs ansieht: Es werden<br />

die beiden Arrays ordnungsgemäß angelegt, allerd<strong>in</strong>gs passiert beim Freigeben<br />

Grauenvolles: Erstens werden nicht alle Objekte ordnungsgemäß destruiert,<br />

sondern immer nur e<strong>in</strong>es von dreien! Zweitens wird der falsche Operator

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!