C ++ std lack_ptr

C ++ std lack_ptr
Um ponteiro único é um ponteiro inteligente. Para discutir o que é um ponteiro único, temos que entender o que são ponteiros inteligentes. O processo de adição e remoção de itens pode ser automatizado com ponteiros inteligentes. Ponteiros inteligentes significam que, quando você liga agora, não precisa ligar para excluir e, em muitos casos, com indicadores inteligentes, nem precisamos ligar para o novo. Ponteiros inteligentes são melhores dessa maneira para fazer tudo isso acontecer.

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_ptr p (novo int);

Aqui, 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.

#incluir
#incluir
usando namespace std;
pessoa de estrutura

Pessoa (string n): nome (n)

cout<
~ Pessoa ()

cout<< "Deleted!";

nome da string;
;
int
principal ()

auto p = make_unique ("jack");
retornar 0;

Nosso 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.

#incluir
#incluir
usando namespace std;
Classe UniquEptr

público:
UniquePtr ()

cout<<”In constructor”<int x = 2;
int y = 3;
int z = x + y;
cout<<”Operation Performed = “<
~ UniquePtr ()

cout<<”In Destructor”<
;
int main ()

std :: Único_ptr x = std :: Único_ptr (novo uniquEptr);
retornar 0;

Depois 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.