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