Avatar ·

Para que serve o placement new em C++ e como usá-lo corretamente?

Olá a todos! Estou estudando C++ e me deparei com algo chamado placement new. No dia a dia, uso `new` para criar objetos no heap e `new[]` para arrays. Mas aqui tem uma sintaxe estranha: `new (ponteiro) Tipo`. Li que isso permite criar um objeto em memória já alocada, em vez de alocar nova. Mas para que isso serve? Não é mais fácil usar sempre o `new` normal? Por exemplo, vi este código: ```cpp #include // necessário 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(); // chamada explícita do destructor std::free(buffer); return 0; } ``` Tenho várias perguntas: 1. Em quais cenários reais isso é aplicado? 2. Por que preciso chamar o destructor manualmente? 3. Existem alguns