C++ · Avançado · Português · Técnico
bloco de controle
Estrutura alocada por shared_ptr que guarda as contagens de donos fortes e fracos, o deleter e, às vezes, o próprio objeto. É compartilhada por todas as cópias do ponteiro.
Onde usar
Explica por que shared_ptr ocupa dois ponteiros e por que make_shared faz uma só alocação, juntando objeto e bloco. É também o que torna o shared_ptr mais pesado que o unique_ptr.
Em código
int* raw = new int(1);
std::shared_ptr<int> a(raw); // bloco 1
std::shared_ptr<int> b(raw); // bloco 2: erro
// dupla liberação ao destruir a e b
// certo: make_shared junta objeto e bloco
auto c = std::make_shared<int>(1);Exemplos
O shared_ptr guarda um ponteiro para o bloco de controle com as contagens.
O make_shared aloca o objeto e o bloco de controle de uma vez só.
Cuidado
Construir shared_ptr a partir do mesmo ponteiro bruto duas vezes cria blocos independentes e deleta o objeto duas vezes.
Sinônimos
control block