C++ · Avançado · Inglês · Técnico
placement new
Forma de new que constrói um objeto em um endereço de memória já alocado, sem alocar. O objeto precisa ser destruído chamando o destrutor manualmente, nunca delete.
Onde usar
Usado em pools de memória, contêineres customizados e na implementação de std::optional. Em code review, exige atenção a alinhamento, tamanho do buffer e destruição explícita.
Em código
alignas(std::string)
unsigned char buf[sizeof(std::string)];
using S = std::string;
auto* p = new (buf) S("oi"); // exige <new>
std::cout << *p;
p->~S(); // destruição manualExemplos
The pool uses placement new to build objects inside its preallocated buffer.
O pool usa placement new para construir objetos dentro do buffer pré-alocado.
With placement new you must call the destructor yourself.
Com placement new você mesmo precisa chamar o destrutor.
Cuidado
Não chame delete em objeto criado por placement new; chame o destrutor e libere o buffer à parte.