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.

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

54 throw( b a d a l l o c ) { return ( ( void ∗ ) 0 ) ; }<br />

55<br />

12.3 Speicherverwaltung 375<br />

56 // f o r b i d array i n s t a n t i a t i o n<br />

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

58 throw( b a d a l l o c ) { return ( ( void ∗ ) 0 ) ; }<br />

59 public :<br />

60 void ∗ operator new( s i z e t s i z e , MemoryProvider ∗ mem provider )<br />

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

62<br />

63 static void destroy ( SpecialMemoryManagedObject ∗ obj ,<br />

64 MemoryProvider ∗ mem provider )<br />

65 throw ( ) ;<br />

66<br />

67 SpecialMemoryManagedObject ( ) { }<br />

68<br />

69 virtual ˜ SpecialMemoryManagedObject ( ) { }<br />

70 } ;<br />

In dieser Klasse wurden bewusst die Standard-Operatoren new und new[]<br />

als private deklariert, um ihre Verwendung zu verh<strong>in</strong>dern. Dafür gibt es<br />

jetzt den speziellen Placement Operator new(), dessen Deklaration man <strong>in</strong><br />

den Zeilen 60–61 sieht. Wenn man schon mit Placement arbeitet, so sollte<br />

man (je nach Anwendung) auch das Standard delete nicht mehr verwenden.<br />

Deshalb wurde e<strong>in</strong>e static Methode destroy e<strong>in</strong>geführt, die diese Aufgabe<br />

übernimmt. Diese sieht man <strong>in</strong> den Zeilen 63–65.<br />

Die Implementation des Placement Operators birgt auch ke<strong>in</strong>e Überraschungen.<br />

Es wird e<strong>in</strong>fach der Speicher vom mitübergebenen Provider angefordert,<br />

wie man <strong>in</strong> der Folge sieht:<br />

105 void ∗ SpecialMemoryManagedObject : : operator new(<br />

106 s i z e t s i z e , MemoryProvider ∗ mem provider )<br />

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

108 {<br />

109 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!