Použitie C ++ unique_ptr

Use C Unique_ptr



Inteligentné ukazovatele sa používajú na dynamické prideľovanie zdrojov. Mnoho typov inteligentných ukazovateľov sa v jazyku C ++ používa na rôzne účely, ako napr auto_ptr , unique_ptr a shared_ptr . Ukazovateľ auto_ptr je v novej verzii C ++ zastaraný. Hodnota unique_ptr sa používa ako náhrada za auto_ptr. Objekt tohto ukazovateľa môže prevziať vlastníctvo ukazovateľa. Objekt tohto ukazovateľa vlastní ukazovateľ jednoznačne a žiadny iný ukazovateľ naň nemôže ukazovať. Unikátny_ptr automaticky odstráni objekty. Tento ukazovateľ spravuje tieto objekty, ak sú objekty zničené alebo sa zmení hodnota objektu alebo sa zavolá funkcia reset (). V tomto návode sú prediskutované funkcie unique_ptr a použitie tohto ukazovateľa.

Hlavné komponenty:







Dve hlavné súčasti objektu unique_ptr sú uvedené nižšie:



A. Uložený ukazovateľ:



Slúži na správu objektov vytvorených jedinečným ukazovateľom. Vytvára sa v čase vytvárania ukazovateľa a dá sa zmeniť rôznymi spôsobmi.





B. Uložený vymazávač:

Vyžaduje argument typu uloženého ukazovateľa, ktorý sa používa na odstránenie spravovaného objektu. Je tiež vytvorený v čase vytvárania ukazovateľa a môže byť zmenený rôznymi spôsobmi.



Príklad 1: Vytvorte objekt ukazovateľa triedy pomocou konštruktora

Spôsob, ako deklarovať jedinečné objekty ukazovateľa triedy a pristupovať k metóde triedy, je pomocou objektov, ako je znázornené v nasledujúcom príklade. V kóde bola deklarovaná trieda s konštruktorom a verejnou metódou. Konštruktor má tri argumenty. Prvý jedinečný ukazovateľ bol vytvorený zavolaním konštruktora s tromi hodnotami argumentov. The Výsledok () metódu nazýva objekt ukazovateľa, ktorý vypočítava súčet troch hodnôt argumentov konštruktora. Ďalej sa vytvorí druhý objekt unikátneho ukazovateľa bez volania konštruktora a prvý ukazovateľ sa presunie na druhý ukazovateľ. The Výsledok () metódu volá druhý ukazovateľ.

//Zahrňte potrebné knižnice

#zahrnúť

#zahrnúť

usingnamespace std;

//Definujte triedu
trieda Doplnenie{

int cislo1, cislo2, cislo3;
verejnosť:
//Vyhlásiť konštruktéra
Dodatok(int a, int b, int c)
{
číslo1 = a;
číslo2 = b;
číslo3 = c;
}
//Deklarovať metódu výpočtusúčet
int Výsledok()
{
vrátiť sačíslo1 + číslo2 + číslo3;
}
};
int hlavné()
{
//Deklarujte prvý ukazovateľ
ukazovateľ unique_ptr1(nový prírastok(Štyria, piati,55,30));

náklady<<„Výsledok súčtu pomocou prvého ukazovateľa:“<Výsledok() <<' n';
//Deklarujte druhý ukazovateľ
unique_ptr pointer2;
//Presuňte prvý ukazovateľ na druhý
ukazovateľ2 = pohyb(ukazovateľ 1);

náklady<<„Výsledok súčtu pomocou druhého ukazovateľa:“<Výsledok() <<' n';
return0;
}

Výkon:

Po spustení vyššie uvedeného kódu sa zobrazí nasledujúci výstup. Súčet 45, 55 a 30 je 130, ktorý bol vytlačený pre oba ukazovatele.

Príklad 2: Vytvorte objekt ukazovateľa triedy pomocou príkazu Constructor a Destructor

Spôsob deklarácie jedinečného objektu ukazovateľa triedy pomocou konštruktora a deštruktora bol ukázaný v nasledujúcom príklade. Trieda obsahuje konštruktor s jedným argumentom, verejnú metódu s názvom Display () hodnoty premennej triedy a deštruktor, ktorý pred zničením objektu triedy vytlačí správu o zničení. Metóda Display () sa volá po vytvorení jedinečného objektu ukazovateľa v kóde.

//Zahrňte potrebné knižnice

#zahrnúť

#zahrnúť

usingnamespace std;

//Definujte triedu
triedny zákazník
{
názov reťazca;

verejnosť:
//Vyhlásiť konštruktéra
Zákazník(reťazec n)
{
meno = n;
náklady<<„Zdroj je pridelený. n';
}

//Deklarujte spôsob vytlačenia mena zákazníka
prázdne zobrazenie()
{
náklady<<„Meno zákazníka je:“<<názov<<' n';
}

//Vyhlásiť ničiteľ
~ Zákazník()
{
náklady<<„Zdroj je zničený. n';
}
};
int hlavné()
{
//Prideľte objekt Resource, ktorý je vo vlastníctve unique_ptr
unique_ptruPointer{nový zákazník(„Mir Abbas“) };
uPointer->Displej();
return0;
}

Výkon:

Po spustení vyššie uvedeného kódu sa zobrazí nasledujúci výstup:

Príklad 3: Po prechode vlastníctva skontrolujte ukazovateľ

Spôsob kontroly vlastníctva jedinečného ukazovateľa ukázal v nasledujúcom príklade vytvorenie dvoch jedinečných ukazovateľov triedy. V kóde bola deklarovaná trieda s dvoma reťazcovými premennými a verejnou metódou. Metóda Book_details () triedy sa volá po vytvorení prvého objektu jedinečného ukazovateľa triedy. Ďalej bol vytvorený druhý objekt unikátneho ukazovateľa a prvý ukazovateľ bol presunutý na druhý ukazovateľ, ktorý ničí prvý ukazovateľ. Vlastníctvo oboch ukazovateľov by ste mali skontrolovať neskôr.

//Zahrňte potrebné knižnice

#zahrnúť

#zahrnúť

usingnamespace std;

//Definujte triedu
triedna kniha{

názov reťazca =„Programovací jazyk C ++“;
autor reťazca =„Bjarne Stroustrup“;

verejnosť:
//Deklarovať spôsob tlače podrobností o knihe
voidBook_details()
{
náklady<<„Názov knihy:“<<titul<<' n';
náklady<<'Meno autora:'<<autor<<' n';
}
};
int hlavné()
{
//Deklarujte prvý ukazovateľ
ukazovateľ unique_ptr1(nová kniha());

ukazovateľ1->Book_details();
//Deklarujte druhý ukazovateľ
unique_ptr pointer2;
//Presuňte prvý ukazovateľ na druhý
ukazovateľ2 = pohyb(ukazovateľ 1);

//Skontrolujte prvý ukazovateľ
keby (static_cast(ukazovateľ 1))náklady<<„Prvý poiner nie je nulový n';
elsecout<<„Prvý poiner je nula n';
//Skontrolujte druhý ukazovateľ
keby (static_cast(ukazovateľ 2))náklady<<„Druhý poiner nie je nulový n';
elsecout<<„Druhý poiner je nulový n';

return0;
}

Výkon:

Po spustení vyššie uvedeného kódu sa zobrazí nasledujúci výstup. Podľa výstupu bolo vlastníctvo prvého ukazovateľa odstránené a správa, Prvý ukazovateľ je nulový vytlačil pre prvý ukazovateľ. Existuje vlastníctvo druhého ukazovateľa a správa, Prvý ukazovateľ nie je null vytlačil pre druhý ukazovateľ:

Záver:

Účely použitia jedinečného ukazovateľa v programovaní v C ++ boli popísané v tomto návode pomocou viacerých príkladov. Tu boli vysvetlené spôsoby, ako vytvoriť jedinečný ukazovateľ, previesť vlastníctvo ukazovateľa a skontrolovať aktuálne vlastníctvo ukazovateľa, aby čitateľom pomohli správne porozumieť používaniu jedinečného ukazovateľa.