Utilizarea C ++ unique_ptr

Use C Unique_ptr



Indicatoarele inteligente sunt utilizate pentru a aloca resursa dinamic. Multe tipuri de indicatoare inteligente sunt utilizate în C ++ în diferite scopuri, cum ar fi auto_ptr , unique_ptr , și shared_ptr . Pointerul auto_ptr este depreciat în noua versiune a C ++. Unique_ptr este utilizat pentru a înlocui auto_ptr. Obiectul acestui pointer poate prelua calitatea de pointer. Obiectul acestui pointer deține pointerul în mod unic și niciun alt pointer nu poate indica obiectul. Unique_ptr șterge automat obiectele. Acest pointer gestionează acele obiecte dacă obiectele sunt distruse, sau valoarea obiectului este modificată sau funcția reset () este apelată. Caracteristicile unic_ptr și utilizările acestui pointer sunt discutate în acest tutorial.

Componente majore:







Două componente principale ale obiectului unique_ptr sunt furnizate mai jos:



A. Pointer stocat:



Este folosit pentru a gestiona obiectele create de un indicator unic. Este creat în momentul creării indicatorului și poate fi schimbat în moduri diferite.





B. Deleter stocat:

Este nevoie de argumentul tipului de pointer stocat care este utilizat pentru a șterge obiectul gestionat. De asemenea, este creat în momentul creării indicatorului și poate fi schimbat prin diferite moduri.



Exemplul 1: Creați un obiect Pointer al unei clase cu Constructor

Modul de a declara obiectele pointer unice ale unei clase și de a accesa metoda clasei este prin utilizarea obiectelor așa cum se arată în exemplul următor. O clasă cu un constructor și o metodă publică a fost declarată în cod. Constructorul are trei argumente. Primul indicator unic a fost creat apelând constructorul cu trei valori de argument. The Rezultat() metoda este apelată de obiectul pointer care calculează suma a trei valori de argument ale constructorului. Apoi, al doilea obiect pointer unic este creat fără a apela constructorul, iar primul pointer este mutat în al doilea pointer. The Rezultat() metoda este apelată de al doilea obiect pointer.

//Includeți bibliotecile necesare

#include

#include

usingnamespace std;

//Definiți clasa
clasa Adăugare{

int număr1, număr2, număr3;
public:
//Declarați constructorul
Plus(int a, int b, int c)
{
număr1 = a;
număr2 = b;
număr3 = c;
}
//Declarați metoda de calcul asumă
int Rezultat()
{
întoarcerenumăr1 + număr2 + număr3;
}
};
int main()
{
//Declarați primul indicator
indicator_ptr unic1(Adăugare nouă(Patru cinci,55,30));

cost<<„Rezultatul sumei folosind primul indicator:”<Rezultat() <<' n';
//Declarați al doilea indicator
pointer2_ptr unic;
//Mutați primul indicator pe al doilea indicator
pointer2 = mutare(pointer1);

cost<<„Rezultatul sumei folosind al doilea indicator:”<Rezultat() <<' n';
return0;
}

Ieșire:

Următoarea ieșire va apărea după executarea codului de mai sus. Suma de 45, 55 și 30 este 130, care a fost tipărită pentru ambele indicatoare.

Exemplul 2: Creați un obiect Pointer al unei clase cu Constructor și Destructor

Modul de a declara un obiect pointer unic al unei clase cu constructor și destructor a fost prezentat în exemplul următor. Clasa conține un constructor cu un singur argument, o metodă publică numită Display () la valoarea variabilei clasei și un destructor care va imprima un mesaj de distrugere înainte de a distruge obiectul clasei. Metoda Display () este apelată după crearea obiectului pointer unic în cod.

//Includeți bibliotecile necesare

#include

#include

usingnamespace std;

//Definiți clasa
clasa Client
{
numele șirului;

public:
//Declarați constructorul
Client(șir n)
{
nume = n;
cost<<„Resursa este alocată. n';
}

//Declarați metoda de imprimare a numelui clientului
afișare nulă()
{
cost<<„Numele clientului este:”<<Nume<<' n';
}

//Declarați distructorul
~ Client()
{
cost<<„Resursa este distrusă. n';
}
};
int main()
{
//Alocați obiectul Resource care este deținut de unique_ptr
unique_ptruPointer{client nou(„Mir Abbas”) };
uPointer->Afişa();
return0;
}

Ieșire:

Următoarea ieșire va apărea după executarea codului de mai sus:

Exemplul 3: Verificați indicatorul după transferul proprietății

Modul de a verifica proprietatea indicatorului unic a fost prezentat în exemplul următor prin crearea a doi indicatori unici ai unei clase. O clasă cu două variabile șir și o metodă publică a fost declarată în cod. Metoda Book_details () a clasei este apelată după crearea primului obiect pointer unic al clasei. Apoi, a fost creat al doilea obiect unic al indicatorului, iar primul indicator a fost mutat în al doilea indicator care distruge primul indicator. Proprietatea ambilor indicatori ar trebui verificată ulterior.

//Includeți bibliotecile necesare

#include

#include

usingnamespace std;

//Definiți clasa
clasa Carte{

string title =„Limbajul de programare C ++”;
autor șir =„Bjarne Stroustrup”;

public:
//Declarați metoda de imprimare a detaliilor cărții
voidBook_details()
{
cost<<„Numele cărții:”<<titlu<<' n';
cost<<'Numele autorului: '<<autor<<' n';
}
};
int main()
{
//Declarați primul indicator
indicator_ptr unic1(carte noua());

pointer1->Detalii_carte();
//Declarați al doilea indicator
pointer2_ptr unic;
//Mutați primul indicator pe al doilea indicator
pointer2 = mutare(pointer1);

//Verificați primul indicator
dacă (static_cast(pointer1))cost<<„Primul indicator nu este nul n';
elsecout<<„Primul indicator este nul n';
//Verificați al doilea indicator
dacă (static_cast(pointer2))cost<<„Al doilea indicator nu este nul n';
elsecout<<„Al doilea indicator este nul n';

return0;
}

Ieșire:

Următoarea ieșire va apărea după executarea codului de mai sus. Conform rezultatului, proprietatea primului indicator a fost eliminată, iar mesajul, Primul indicator este nul a imprimat pentru primul indicator. Proprietatea celui de-al doilea indicator există și mesajul, Primul indicator nu este nul a imprimat pentru al doilea indicator:

Concluzie:

Scopurile utilizării unui pointer unic în programarea C ++ au fost descrise în acest tutorial utilizând mai multe exemple. Modurile de a crea un indicator unic, de a transfera dreptul de proprietate asupra indicatorului și de a verifica proprietatea actuală a indicatorului au fost explicate aici pentru a ajuta cititorii să cunoască corect utilizarea indicatorului unic.