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`, um Objekte auf dem Heap zu erstellen, und `new[]` für Arrays. Aber hier gibt es eine seltsame Syntax: `new (Zeiger) Typ`. Ich habe gelesen, dass es ermöglicht, ein Objekt in bereits zugewiesenem Speicher zu erstellen, anstatt neuen zu allozieren. Aber wozu ist das nötig? Ist es nicht einfacher, immer normales `new` zu verwenden? Zum Beispiel habe ich diesen Code gesehen: ```cpp #include // benötigt für placement new struct MyStruct { int x; MyStruct(int val) : x(val) { std::cout << "Constructor\n"; } ~MyStruct() { std::cout << "Destructor\n"; } }; int main() { void* buffer = std::malloc(sizeof(MyStruct)); MyStruct* p = new (buffer) MyStruct(42); // placement new // ... p->~MyStruct(); // expliziter Destruktoraufruf std::free(buffer); return 0; } ``` Ich habe mehrere Fragen: 1. In welchen realen Szenarien wird dies angewendet? 2. Warum muss der Destruktor manuell aufgerufen werden? 3. Gibt es irgendwelche