Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criando e Compartilhando Shared Pointers | Ponteiros Compartilhados
C++ Smart Pointers
course content

Conteúdo do Curso

C++ Smart Pointers

C++ Smart Pointers

1. Introdução a Ponteiros Inteligentes
2. Ponteiros Únicos
3. Ponteiros Compartilhados
4. Ponteiros Fracos
5. Tópicos Avançados

book
Criando e Compartilhando Shared Pointers

A Abordagem Recomendada

A maneira recomendada de criar um ponteiro compartilhado é através da função std::make_shared. Esta abordagem é geralmente mais eficiente e expressiva em comparação com o uso de new. Ela aloca memória para o objeto e o bloco de controle (contagem de referência) em uma única etapa. Por exemplo:

h

make_shared

copy
12
// Create a shared pointer to an integer std::shared_ptr<int> p_int = std::make_shared<int>(42);

A linha acima aloca um inteiro dinâmico e também inicializa um ponteiro compartilhado para ele com uma contagem de referência de um.

A Abordagem Desencorajada

Você também pode criar ponteiros compartilhados usando new, mas este método é desencorajado porque não é expressivo nem eficiente. A sintaxe para esta abordagem requer que você passe o objeto para o construtor do ponteiro compartilhado.

h

creating_shared_pointer

copy
12
// Also creates a shared pointer to an integer std::shared_ptr<int> p_int(new int(42));

Alocando um inteiro dinâmico e, em seguida, passando-o para o construtor do ponteiro compartilhado. No entanto, o bloco de controle (contagem de referência) será inicializado dentro do construtor.

Isso significa que estamos fazendo duas inicializações separadas, o que é ineficiente e erro pode ser gerado.

Passando Shared Pointers

Shared pointers são projetados para compartilhamento seguro. Vamos explorar algumas maneiras de passá-los.

question mark

Se quatro instâncias de shared_ptr compartilham a propriedade do mesmo objeto dinâmico, quando o destrutor do objeto será chamado?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2
Sentimos muito que algo saiu errado. O que aconteceu?
some-alt