C ++ std auto_ptr

C ++ std auto_ptr
Ponteiros são os usados ​​para acessar os recursos externos ao programa, o mesmo que a memória da heap. Quando precisamos acessar a pilha de memória, suponhamos que tenhamos um valor inteiro que seja armazenado na pilha de memória, podemos acessar isso usando ponteiros. Às vezes, devido à inconsciência, os ponteiros não são deslocados e podem causar um vazamento de memória ou pode travar todo o programa. Para impedir que essa situação seja usada, nesse mecanismo quando o objeto é destruído, a memória também é libertada. Vários ponteiros inteligentes podem ser usados, mas, neste tutorial, discutiremos o ponteiro automático.

Além disso, o ponteiro automático é o ponteiro inteligente. É preciso um ponteiro bruto, envolve -o e garante que a memória apontada pelo ponteiro bruto seja liberada de volta sempre que o objeto de ponteiro automático sai do escopo, a qualquer momento um ponteiro automático pode apontar para um objeto. Portanto, sempre que um ponteiro automático é atribuído a outro ponteiro automático, a propriedade é transferida para a instância do ponteiro automático que recebeu a tarefa. O mesmo acontecerá quando um ponteiro automático for copiado.

Os ponteiros automáticos são os mesmos que o ponteiro único ou podemos dizer que o ponteiro único é a nova versão do ponteiro automático. Quando o objeto é declarado usando o ponteiro automático, ele armazenará o ponteiro em um único objeto que garante que sempre que o ponteiro saia do escopo, o objeto para o qual está apontando seja automaticamente destruído.

Sintaxe

A sintaxe para declarar um ponteiro automático é mostrado abaixo:

std :: auto_ptr p (novo int);

Na sintaxe acima "P" está o objeto de ponteiro automático que declaramos onde o "tipo" é o tipo de dados que o ponteiro P conterá. E usando a nova palavra -chave, alocamos a pilha de memória para o número inteiro que queremos armazenar nela.

Exemplo # 01:

Para entender o funcionamento do ponteiro automático em detalhes, realizaremos um exemplo no qual declararemos um ponteiro automático e exibiremos o local da memória ao qual será referenciado. Agora, vamos para o nosso código, onde todo o processo será realizado da criação para a alocação de memória. Primeiro incluiremos nosso arquivo de cabeçalho o "iostream" e o segundo "memória". O "iostream" é o pacote da biblioteca que permite ao codificador executar várias operações de entrada e saída. Considerando que a biblioteca de “memória” é a que envolve a alocação da heap de memória. Fora da função principal, declaramos duas classes de objetos. O primeiro é nomeado "AutoPointer", que será chamado usando um ponteiro automático. Dentro do objeto "AutoPointer", criamos uma função pública chamada "show ()".

O objetivo de usar a palavra -chave pública é torná -la acessível para todas as funções dentro do código. Em nossa função show (), exibimos uma mensagem de criação de ponteiro, sempre que o ponteiro for criado para o objeto "AutoPooTer", ele exibirá a mensagem. A segunda classe de objeto é chamada "AutoPointer2" que criamos para o nosso segundo ponteiro automático para o qual também passamos a declaração "cout" exibindo a mensagem de "Second_ptr criado".

Agora, movendo -se para a função principal que retorna o tipo inteiro. Primeiro declaramos um ponteiro automático para um objeto do tipo "AutoPointer" chamado "First_Ptr". Usando a nova palavra -chave, alocamos a pilha de memória para o objeto "AutoPointer" na próxima linha do nosso código que chamamos de função de show usando o ponteiro de "primeiro_ptr". Nisso, usamos o operador de seta “->”, em C ++, nos permite acessar os elementos dos objetos. Eles são usados ​​com as variáveis ​​de ponteiro que estão apontando para a classe de objeto. Quando a função Show é chamada usando o "First_PTR", ele exibirá a mensagem "First_Ptr criada" então, usando o método get () que é fornecido para obter o local da memória ou os dados armazenados em um heap de memória. Mas, no nosso caso, estaremos recebendo o endereço onde a pilha de memória onde o "First_Ptr" é alocado.

Depois de exibir o local "First_Ptr", criaremos outro ponteiro automático chamado "Second_Ptr" do tipo de objeto "AutoPointer2". Novamente, usando o novo ponteiro, reservamos o local da memória para ele. Agora, mudando para a próxima linha, estamos usando a função "Second_Ptr" que chamamos de "show ()" que criamos para o objeto "AutoPointer2". Uma coisa a lembrar é quando declaramos um ponteiro automático para algum objeto, ele terá a função do objeto de classe para o qual criamos o ponteiro. Não terá a função da outra classe de objeto, seja eles tendo os mesmos nomes. Como no nosso caso nas duas classes de objetos, criamos as mesmas funções chamadas "show ()". Depois disso, usando o método get (), acessamos o heap de memória usando o "Second_ptr", onde o segundo ponteiro "segundo_ptr" é armazenado. No final do código, retornamos o valor nulo, o que significa que o programa será executado com sucesso sem ter nenhum erro e estará executando a tarefa desejada para a qual se destina a.

#incluir
#incluir
usando namespace std;
classe AutoPointer
público:
void show () cout<< "first_Ptr created" <;
classe AutoPointer2
público:
void show () cout<< "second_Ptr created" <;
int main ()

auto_ptrfirst_ptr (novo autopointer);
primeiro_ptr-> show ();
cout<auto_ptrSecond_ptr (novo AutoPointer2);
Second_ptr-> show ();
cout<retornar 0;

Agora, vamos verificar a saída que obtivemos como resultado do código que escrevemos que é exibido no trecho acima. Como podemos ver nesta saída, exibimos a mensagem de criação de ponteiro para ambos os nossos ponteiros de automóveis. O local da memória para ambos os ponteiros foi exibido sem nenhum erro.

Conclusão

Neste tutorial, demonstramos o comportamento interno do ponteiro automático. O ponteiro automático foi introduzido em C ++ 3. Usando exemplos e cenários, explicamos brevemente para facilitar a compreensão do trabalho e da metodologia de como ela é usada. Os ponteiros automáticos são preteridos por causa de sua propriedade. É a propriedade de uma maneira que dois ponteiros ao mesmo tempo não podem ter o mesmo objeto.