Uso de C ++ Única_ptr

Uso de C ++ Única_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 propósitos, como auto_ptr, exclusivo_ptr, e shared_ptr. O ponteiro Auto_PTR está depreciado na nova versão de C++. O exclusivo_ptr é usado na substituição do auto_ptr. O objeto deste ponteiro pode se apropriar do ponteiro. O objetivo deste ponteiro possui o ponteiro exclusivamente, e nenhum outro ponteiro pode apontar para o objeto. O exclusivo_ptr exclui os objetos automaticamente. Este ponteiro gerencia esses objetos se os objetos forem destruídos, ou o valor do objeto é alterado ou a função RESET () é chamada. Os recursos do exclusivo_ptr e os usos deste ponteiro são discutidos neste tutorial.

Principais componentes:

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

A. Ponteiro armazenado:

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

B. Deleter armazenado:

Ele leva o argumento do tipo de ponteiro armazenado que é usado para excluir o objeto gerenciado. Também é criado no momento da criação do ponteiro e pode ser alterado de maneiras diferentes.

Exemplo 1: Crie um objeto ponteiro de uma classe com construtor

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

// inclui bibliotecas necessárias
#incluir
#incluir
UsandoNamesPace std;
// Defina a classe
classe adição
int número 1, número2, número3;
público:
// declarar o construtor
Adição (int a, int b, int c)

número1 = a;
número2 = b;
número3 = c;

// Declare o método para calcular a soma
int resultado ()

retorno número 1 + número2 + número3;

;
int main ()

// declarar o primeiro ponteiro
Único_ptr Pointer1 (nova adição (45, 55, 30));
cout<<"The result of sum using the first pointer :"// Declare o segundo ponteiro
Único_ptr pointer2;
// mova o primeiro ponteiro para o segundo ponteiro
pointer2 = mover (ponteiro1);
cout<<"The result of sum using the second pointer :"return0;

Saída:

A saída a seguir 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: Crie um objeto ponteiro de uma classe com construtor e destruidor

A maneira de declarar um objeto de ponteiro único de uma classe com construtor e destruidor foi mostrado no exemplo a seguir. A classe contém um construtor com um argumento, um método público chamado 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 Pointer exclusivo no código.

// inclui bibliotecas necessárias
#incluir
#incluir
UsandoNamesPace std;
// Defina a classe
Cliente de classe

nome da string;
público:
// declarar o construtor
Cliente (string n)

nome = n;
cout<<"The resource is allocated.\n";

// Declare o método para imprimir o nome do cliente
Void Display ()

cout<<"The name of the customer is: "<< name <<"\n";

// declarar o destruidor
~ Cliente ()

cout<<"The resource is destroyed.\n";

;
int main ()

// ALLOCAR o objeto de recurso que pertence ao exclusivo_ptr
exclusivo_ptrUpointer new Customer ("Mir Abbas");
Upter-> display ();
return0;

Saída:

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

Exemplo 3: Verifique o ponteiro depois de transferir a propriedade

A maneira de verificar a propriedade do ponteiro exclusivo mostrou 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 declarado no código. O método book_details () da classe é chamado depois de criar o primeiro objeto de ponteiro exclusivo da classe. Em seguida, o segundo objeto de ponteiro único foi criado e o primeiro ponteiro foi movido para o segundo ponteiro que destrói o primeiro ponteiro. A propriedade de ambos os ponteiros deve ser verificada mais tarde.

// inclui bibliotecas necessárias
#incluir
#incluir
UsandoNamesPace std;
// Defina a classe
livro escolar
String title = "A linguagem de programação C ++";
String Author = "Bjarne Stroustrup";
público:
// Declare o método para imprimir detalhes do livro
voidBook_details ()

cout<<"Book Name: "<< title <<"\n";
cout<<"Author Name: "<< author <<"\n";

;
int main ()

// declarar o primeiro ponteiro
Único_ptr pointer1 (novo livro ());
pointer1-> book_details ();
// Declare o segundo ponteiro
Único_ptr pointer2;
// mova o primeiro ponteiro para o segundo ponteiro
pointer2 = mover (ponteiro1);
// Verifique o primeiro ponteiro
if (static_cast (pointer1)) cout<<"The first poiner is not null\n";
elsecout<<"The first poiner is null\n";
// Verifique o segundo ponteiro
if (static_cast (pointer2)) cout<<"The second poiner is not null\n";
elsecout<<"The second poiner is null\n";
return0;

Saída:

A saída a seguir 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”Imprimiu 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 propósitos de usar um ponteiro exclusivo na programação C ++ foram descritos neste tutorial usando vários exemplos. As maneiras de criar um ponteiro único, 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 único corretamente.