30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

382 12. Operator Overload<strong>in</strong>g<br />

hilft e<strong>in</strong> spezieller delete Operator, der zwei Parameter übergeben bekommt,<br />

nämlich den Base-Po<strong>in</strong>ter und die Größe. Im folgenden Beispiel<br />

(fifth_new_delete_overload<strong>in</strong>g_demo.cpp) wurde e<strong>in</strong>e Abwandlung unsere<br />

selbstverwalteten Objekte implementiert. Wiederum gibt es e<strong>in</strong>e Basisklasse,<br />

die entsprechende new, new[], delete und delete[] Operatoren<br />

implementiert. Die Deklaration sieht folgendermaßen aus:<br />

23 class MemoryManagedObject<br />

24 {<br />

25 public :<br />

26 void ∗ operator new( s i z e t s i z e )<br />

27 throw( b a d a l l o c ) ;<br />

28<br />

29 void ∗ operator new [ ] ( s i z e t s i z e )<br />

30 throw( b a d a l l o c ) ;<br />

31<br />

32 void operator delete ( void ∗ base ptr , s i z e t s i z e )<br />

33 throw ( ) ;<br />

34<br />

35 void operator delete [ ] ( void ∗ base ptr , s i z e t s i z e )<br />

36 throw ( ) ;<br />

37<br />

38 virtual ˜ MemoryManagedObject ( ) { }<br />

39 } ;<br />

Bei den beiden delete Operatoren ist nun jeweils e<strong>in</strong> zweiter Parameter<br />

dabei, der Auskunft über die Größe des freizugebenden Blocks gibt. Die Implementation<br />

der Operatoren <strong>in</strong> unserem Beispiel birgt nichts wirklich Neues<br />

und liest sich so:<br />

70 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

71 /∗<br />

72 ∗/<br />

73 void ∗ MemoryManagedObject : : operator new( s i z e t s i z e )<br />

74 throw( b a d a l l o c )<br />

75 {<br />

76 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!