C++-Programmierung/ Speicherverwaltung/ Placement new

Aus Wikibooks


Neben dem in C++ verwendeten Operator new, der auf dem Haldenspeicher Platz reserviert, unterstützt Standard-C++ auch den sogenannten Platzierungsoperator new (engl. placement new), der es ermöglicht, ein neues Objekt einem vorbereiteten Puffer zuzuordnen. Hier der Vergleich der unterschiedlichen Speicherreservierungen:

void placement() {
	string *q = new string("hi");		// Normale Speicherreservierung auf dem Haldenspeicher
	char *buf  = new char[1000];		// In voraus reservierter Pufferspeicher

	string *p = new (buf) string("hi");	// Placement new
}

Verwendet wird dieses Konzept, wenn

Nachteil ist die höhere Komplexität, für anzulegende Objekte zusätzlich Buffer vorzuhalten und zu verwalten, sowie auf deren Größenbeschränkungen acht zu geben. Derartige Aufgaben erledigt beim einfachen new die Sprache und das Betriebssystem für das Programm (und den Programmierer).