ExpertiDict

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

bloco de controle

ˈblɔku dʒi kõˈtɾolilocução nominal

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

Veja também

Todos os termos de C++