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