¿Para qué sirve placement new en C++ y cómo usarlo correctamente?
¡Hola a todos! Estoy aprendiendo C++ y me topé con algo llamado placement new. En la vida normal uso `new` para crear objetos en el heap y `new[]` para arrays. Pero aquí hay una sintaxis extraña: `new (puntero) Tipo`. Leí que esto permite crear un objeto en memoria ya asignada, en lugar de asignar nueva. Pero, ¿para qué sirve? ¿No es más fácil usar siempre el `new` normal?
Por ejemplo, vi este código:
```cpp
#include // necesario para 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(); // llamada explícita al destructor
std::free(buffer);
return 0;
}
```
Tengo varias preguntas:
1. ¿En qué escenarios reales se aplica esto?
2. ¿Por qué hay que llamar al destructor manualmente?
3. ¿Hay alguna...