Sempre que o ponteiro inteligente for criado, ele chamará automaticamente o novo e alocará a pilha de memória. Então, com base no ponteiro inteligente que você usa, essa memória se tornará automaticamente gratuita. Vamos agora chegar ao nosso assunto principal, o ponteiro único. Um ponteiro único será eliminado quando sair do escopo. Ponteiros únicos não podem ser copiados para o outro ponteiro, seja do mesmo tipo de dados porque um ponteiro único está apontando para uma memória. Se o ponteiro único foi copiado, isso significa que, em um momento, duas dicas estão apontando para a mesma pilha de memória. Então, é por isso que não podemos copiar ponteiros exclusivos. Ponteiros únicos garantem que eles excluam seus objetos com eles.
Sintaxe
A sintaxe para criar um ponteiro único é o seguinte:
std :: Único_ptrAqui, o objeto criado dinamicamente também é destruído quando o próprio ponteiro é destruído.
Exemplo # 01:
Para entender dicas únicas em mais profundidade, estaremos dando um exemplo. Neste exemplo, definimos uma estrutura chamada. "Pessoa" tem um construtor que pega uma string como um parâmetro e imprime o valor. Ele também tem um destruidor que, após a destruição, imprimirá “excluído” para que possamos entender que a pessoa é destruída. Dentro do método principal, declaramos um ponteiro único e passamos um valor “Jack.”.
Agora, este ponteiro levará "Jack" e o passará para a memória que está apontando para isso é a estrutura "pessoa". O valor "jack" irá para o construtor e será impresso. Depois disso, o ponteiro único excluirá automaticamente o objeto e “excluído!”Será impresso na tela. Agora, vamos correr e executar nosso código para ver a saída.
#incluirNosso código foi executado com sucesso e nos fornece a saída esperada. O ponteiro único assumiu o valor "Jack" e passou para o construtor porque estava apontando para o objeto da estrutura "pessoa". O construtor imprimiu o valor. Depois disso, "excluído" é impresso. Agora, aqui, apenas imprimimos o valor. Mas em cenários em tempo real, podemos executar todas as operações e, após a operação for executada, o objeto de estrutura ou classe será destruído.
Exemplo # 02:
Neste exemplo, tentamos explicar o construtor exclusivo em detalhes. Também tentamos criar um ponteiro único de maneira diferente para que você possa entender as diferentes sintaxes e abordagens para criar indicadores exclusivos. Para realizar este exemplo, criamos uma classe chamada "UniquePtr". Nesta classe, temos um construtor desta classe e um destruidor. No exemplo anterior, explicamos que podemos fazer qualquer operação que queremos no construtor. Neste exemplo, tentamos fazê-lo para lhe dar uma experiência prática.
Então, no construtor primeiro, imprimimos “no construtor” para que o usuário saiba que estamos em nosso construtor no momento. Depois disso, declaramos dois números inteiros "X" e "Y", que mantêm os valores de "2" e "3", respectivamente. Depois disso, declaramos outra variável que também é um número inteiro: "Z". Resumimos ou adicionamos os valores de "x" e "y" e armazenamos a saída no número inteiro "z". Na linha número 13, imprimimos “Operação executada” e também imprimimos o valor de “Z” contra, para que possamos informar ao usuário que a operação é executada e o valor após a operação é o seguinte.
Em nosso destruidor, simplesmente imprimimos “In Destructor”. No método principal, simplesmente criamos o ponteiro exclusivo e passamos o nome da classe para que ele possa entender qual a memória deve apontar para. Agora, vamos executar nosso código para verificar a saída.
#incluirDepois que nosso código é executado, o seguinte é a saída que obteremos do sistema. Uma coisa a explicar aqui é que, em nosso método principal, não criamos nenhum objeto da classe para acessá -lo. Em vez disso, criamos apenas um ponteiro único e o apontamos para a nossa classe. O sistema imprimiu “no construtor”, o que significa que ele foi no construtor e a outra linha impressa também explica que o sistema executou a operação de adição nos números inteiros e imprimiu o valor contra a mensagem impressa. Por fim, o compilador se moveu para dentro do destruidor, imprimiu a mensagem e destruiu o objeto da classe. Uma coisa a observar aqui é que não criamos ou excluímos a pilha de memória aqui. Essa coisa toda foi feita pelo nosso ponteiro único.
Conclusão
Neste guia, discutimos um tipo de ponteiro inteligente que é um ponteiro único. Ponteiros únicos são indicadores inteligentes que nos ajudam com alocação e gerenciamento de memória. Então, para entender ponteiros únicos, explicamos primeiro indicadores inteligentes e ponteiros únicos teoricamente. Depois disso, explicamos a sintaxe de dicas únicas. Vários exemplos foram realizados em diferentes cenários para fazer o leitor entender os ponteiros únicos praticamente.