ExpertiDict

C++ · Avançado · Inglês · Técnico

placement new

ˈpleɪsmənt nuːsubstantivo

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 manual

Exemplos

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.

Veja também

Todos os termos de C++