Avatar ·

Wozu braucht man placement new in C++ und wie verwendet man es richtig?

Hallo zusammen! Ich lerne C++ und bin auf so etwas wie placement new gestoßen. Im normalen Leben verwende ich `new` zum Erstellen von Objekten auf dem Heap und `new[]` für Arrays. Aber hier gibt es eine seltsame Syntax: `new (Zeiger) Typ`. Ich habe gelesen, dass dies ermöglicht, ein Objekt in bereits reserviertem Speicher zu erstellen, anstatt neuen Speicher zu reservieren. Aber wozu braucht man das? Ist es nicht einfacher, immer normales `new` zu verwenden?\n\nZum Beispiel habe ich solchen Code gesehen:\n```cpp\n#include // wird für placement new benötigt\n\nstruct MyStruct {\n int x;\n MyStruct(int val) : x(val) { std::cout << "Constructor"; }\n ~MyStruct() { std::cout << "Destructor"; }\n};\n\nint main() {\n void* buffer = std::malloc(sizeof(MyStruct));\n MyStruct* p = new (buffer) MyStruct(42); // placement new\n // ...\n p->~MyStruct(); // expliziter Destruktor-Aufruf