Uso de C ++ unique_ptr

Use C Unique_ptr



Os ponteiros inteligentes são usados ​​para alocar o recurso dinamicamente. Muitos tipos de ponteiros inteligentes são usados ​​em C ++ para vários fins, como auto_ptr , unique_ptr , e shared_ptr . O ponteiro auto_ptr está obsoleto na nova versão do C ++. O unique_ptr é usado em substituição ao auto_ptr. O objeto deste ponteiro pode se apropriar do ponteiro. O objeto deste ponteiro possui o ponteiro exclusivamente e nenhum outro ponteiro pode apontar para o objeto. O unique_ptr exclui os objetos automaticamente. Este ponteiro gerencia esses objetos se os objetos forem destruídos, se o valor do objeto for alterado ou se a função reset () for chamada. Os recursos do unique_ptr e os usos deste ponteiro são discutidos neste tutorial.

Componentes principais:







Dois componentes principais do objeto unique_ptr são fornecidos abaixo:



A. Ponteiro armazenado:



É usado para gerenciar os objetos criados por um ponteiro único. Ele é criado no momento da criação do ponteiro e pode ser alterado de diferentes maneiras.





B. Eliminador armazenado:

Leva o argumento do tipo de ponteiro armazenado que é usado para excluir o objeto gerenciado. Ele também é criado no momento da criação do ponteiro e pode ser alterado de várias maneiras.



Exemplo 1: Criar um objeto Pointer de uma classe com construtor

A maneira de declarar os objetos de ponteiro exclusivos de uma classe e acessar o método da classe é usando os objetos conforme mostrado no exemplo a seguir. Uma classe com um construtor e um método público foi declarada no código. O construtor possui três argumentos. O primeiro ponteiro exclusivo foi criado chamando o construtor com três valores de argumento. o Resultado() método é chamado pelo objeto ponteiro que calcula a soma de três valores de argumento do construtor. Em seguida, o segundo objeto de ponteiro exclusivo é criado sem chamar o construtor e o primeiro ponteiro é movido para o segundo ponteiro. o Resultado() método é chamado pelo segundo objeto de ponteiro.

//Incluir bibliotecas necessárias

#incluir

#incluir

usingnamespace std;

//Defina a classe
classe Addition{

int numero1, numero2, numero3;
público:
//Declare o construtor
Adição(int a, int b, int c)
{
numero1 = a;
numero2 = b;
numero3 = c;
}
//Método de declaração para calcular osoma
Resultado int()
{
Retornanumero1 + numero2 + numero3;
}
};
int principal()
{
//Declare o primeiro ponteiro
unique_ptr pointer1(nova adição(Quatro cinco,55,30));

custo<<'O resultado da soma usando o primeiro ponteiro:'<Resultado() <<' n';
//Declare o segundo ponteiro
unique_ptr pointer2;
//Mova o primeiro ponteiro para o segundo ponteiro
ponteiro2 = mover(ponteiro1);

custo<<'O resultado da soma usando o segundo ponteiro:'<Resultado() <<' n';
return0;
}

Saída:

A seguinte saída aparecerá após a execução do código acima. A soma de 45, 55 e 30 é 130 que foi impressa para ambos os ponteiros.

Exemplo 2: criar um objeto Pointer de uma classe com construtor e destruidor

A maneira de declarar um objeto de ponteiro exclusivo de uma classe com construtor e destruidor foi mostrada no exemplo a seguir. A classe contém um construtor com um argumento, um método público denominado Display () para o valor da variável de classe e um destruidor que imprimirá uma mensagem de destruição antes de destruir o objeto da classe. O método Display () é chamado após a criação do objeto de ponteiro exclusivo no código.

//Incluir bibliotecas necessárias

#incluir

#incluir

usingnamespace std;

//Defina a classe
classe Cliente
{
nome da string;

público:
//Declare o construtor
Cliente(string n)
{
nome = n;
custo<<'O recurso está alocado. n';
}

//Método de declaração para imprimir o nome do cliente
void Display()
{
custo<<'O nome do cliente é:'<<nome<<' n';
}

//Declare o destruidor
~ Cliente()
{
custo<<'O recurso está destruído. n';
}
};
int principal()
{
//Alocar o objeto Resource que pertence ao unique_ptr
unique_ptruPointer{Novo cliente('Mir Abbas') };
uPointer->Exibição();
return0;
}

Saída:

A seguinte saída aparecerá após a execução do código acima:

Exemplo 3: verificar o ponteiro após transferir a propriedade

A maneira de verificar a propriedade do ponteiro exclusivo é mostrada no exemplo a seguir, criando dois ponteiros exclusivos de uma classe. Uma classe com duas variáveis ​​de string e um método público foi declarada no código. O método Book_details () da classe é chamado após a criação do primeiro objeto de ponteiro exclusivo da classe. Em seguida, o segundo objeto de ponteiro exclusivo foi criado e o primeiro ponteiro foi movido para o segundo ponteiro que destrói o primeiro. A propriedade de ambos os ponteiros deve ser verificada posteriormente.

//Incluir bibliotecas necessárias

#incluir

#incluir

usingnamespace std;

//Defina a classe
livro escolar{

string title ='A linguagem de programação C ++';
string autor ='Bjarne Stroustrup';

público:
//Método de declaração para imprimir detalhes do livro
voidBook_details()
{
custo<<'Nome do livro:'<<título<<' n';
custo<<'Nome do autor: '<<autor<<' n';
}
};
int principal()
{
//Declare o primeiro ponteiro
unique_ptr pointer1(livro novo());

ponteiro1->Book_details();
//Declare o segundo ponteiro
unique_ptr pointer2;
//Mova o primeiro ponteiro para o segundo ponteiro
ponteiro2 = mover(ponteiro1);

//Verifique o primeiro ponteiro
E se (static_cast(ponteiro1))custo<<'O primeiro ponteiro não é nulo n';
elsecout<<'O primeiro ponteiro é nulo n';
//Verifique o segundo ponteiro
E se (static_cast(ponteiro2))custo<<'O segundo ponteiro não é nulo n';
elsecout<<'O segundo ponteiro é nulo n';

return0;
}

Saída:

A seguinte saída aparecerá após a execução do código acima. De acordo com a saída, a propriedade do primeiro ponteiro foi removida e a mensagem, O primeiro ponteiro é nulo foi impresso para o primeiro ponteiro. A propriedade do segundo ponteiro existe, e a mensagem, O primeiro ponteiro não é nulo imprimiu para o segundo ponteiro:

Conclusão:

Os objetivos de usar um ponteiro exclusivo na programação C ++ foram descritos neste tutorial usando vários exemplos. As maneiras de criar um ponteiro exclusivo, transferir a propriedade do ponteiro e verificar a propriedade atual do ponteiro foram explicadas aqui para ajudar os leitores a saber o uso do ponteiro exclusivo de maneira adequada.