kennen:include:new
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:new [2012-02-24 15:15] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== <new> ====== | ||
+ | ===== Dynamische Speicherverwaltung ===== | ||
+ | <code cpp> | ||
+ | class bad_alloc; | ||
+ | extern const struct nothrow_t nothrow; | ||
+ | typedef void (*new_handler)(); | ||
+ | </ | ||
+ | Eine [[..: | ||
+ | Dann wird eine '' | ||
+ | Statt Ausnahmen zu werfen, kann ein [[# | ||
+ | installiert werden. Dieser wird dann aufgerufen, wenn die Speicheranforderung scheitert. | ||
+ | |||
+ | Mit der Kennzeichnung '' | ||
+ | Falls die Speicheranforderung scheitert, | ||
+ | wird ein '' | ||
+ | Deshalb muss man selbst den Zeiger auf Gültigkeit prüfen: | ||
+ | |||
+ | <code cpp> | ||
+ | p = new(nothrow) int[1000]; | ||
+ | if (p) | ||
+ | { | ||
+ | // ... // Objekte nutzen | ||
+ | } | ||
+ | delete [] p; | ||
+ | </ | ||
+ | Wenn Rohspeicher vorhanden ist, | ||
+ | können Objekte mit der Plazierungssyntax auch dort angelegt werden. | ||
+ | Damit ist es möglich, eine eigene Speicherverwaltung aufzubauen. | ||
+ | Allerdings darf der Zeiger dann nicht an den Heap zurückgegeben werden. | ||
+ | Der Destruktor ist explizit aufzurufen, | ||
+ | der zugeordnete Plazierungsoperator '' | ||
+ | |||
+ | <code cpp> | ||
+ | char rohspeicher[sizeof(Klasse)]; | ||
+ | p = new(rohspeicher) Klasse; | ||
+ | // ... // Objekt nutzen | ||
+ | p-> | ||
+ | operator delete(p, rohspeicher); | ||
+ | </ | ||
+ | Die [[..: | ||
+ | verstecken diese unhandliche Technik hinter einer allgemein nutzbaren Schnittstelle. | ||
+ | |||
+ | ===== Funktionen ===== | ||
+ | <code cpp> | ||
+ | new_handler set_new_handler(new_handler handler) | ||
+ | </ | ||
+ | [[..: | ||
+ | | ||
kennen/include/new.txt · Zuletzt geändert: 2012-02-24 15:15 von 127.0.0.1