Paggamit ng C ++ natatanging_ptr

Use C Unique_ptr



Ginagamit ang matalinong mga payo upang mailaan ang mapagkukunan nang pabago-bago. Maraming mga uri ng matalinong mga payo ang ginagamit sa C ++ para sa iba't ibang mga layunin, tulad ng auto_ptr , natatanging_ptr , at ibinahagi_ptr . Ang auto_ptr pointer ay hindi na ginagamit sa bagong bersyon ng C ++. Ginagamit ang natatanging_ptr bilang kapalit ng auto_ptr. Ang object ng pointer na ito ay maaaring tumagal ng pagmamay-ari ng pointer. Ang object ng pointer na ito ang nagmamay-ari ng pointer nang natatangi, at walang ibang pointer na maaaring magturo sa object. Awtomatikong tinatanggal ng natatanging_ptr ang mga bagay. Pinamamahalaan ng pointer na ito ang mga bagay na kung ang mga bagay ay nawasak, o ang halaga ng bagay ay nabago o ang pag-reset () na function ay tinawag. Ang mga tampok ng natatanging_ptr at ang mga gamit ng pointer na ito ay tinalakay sa tutorial na ito.

Pangunahing sangkap:







Ang dalawang pangunahing bahagi ng natatanging_ptr na bagay ay ibinibigay sa ibaba:



A. Nakaimbak na Pointer:



Ginagamit ito upang pamahalaan ang mga bagay na nilikha ng isang natatanging pointer. Ito ay nilikha sa oras ng paglikha ng pointer, at maaari itong mabago sa iba't ibang paraan.





B. Nakaimbak na Deleter:

Kinakailangan ang pagtatalo ng nakaimbak na uri ng pointer na ginagamit upang tanggalin ang pinamamahalaang bagay. Nilikha rin ito sa oras ng paglikha ng pointer, at mababago ito ng iba't ibang paraan.



Halimbawa 1: Lumikha ng isang Pointer na Bagay ng isang Klase Sa Tagatayo

Ang paraan upang ideklara ang mga natatanging object ng pointer ng isang klase at ma-access ang pamamaraan ng klase ay sa pamamagitan ng paggamit ng mga bagay tulad ng ipinakita sa sumusunod na halimbawa. Ang isang klase na may tagabuo at isang pampublikong pamamaraan ay naideklara sa code. Ang tagapagbuo ay may tatlong mga argumento. Ang unang natatanging pointer ay nilikha sa pamamagitan ng pagtawag sa tagapagbuo na may tatlong mga halaga ng argument. Ang Resulta () Ang pamamaraan ay tinawag ng object ng pointer na kinakalkula ang kabuuan ng tatlong halaga ng argumento ng tagapagbuo. Susunod, ang pangalawang natatanging object ng pointer ay nilikha nang hindi tumatawag sa tagapagbuo, at ang unang pointer ay inilipat sa pangalawang pointer. Ang Resulta () ang pamamaraan ay tinawag ng ikalawang object ng pointer.

//Isama ang mga kinakailangang aklatan

# isama

# isama

usingnamespace std;

//Tukuyin ang klase
Pagdagdag ng klase{

int number1, number2, number3;
pampubliko:
//Ipahayag ang tagapagbuo
Dagdagan(int a, int b, int c)
{
numero1 = a;
numero2 = b;
numero3 = c;
}
//Ipahayag ang pamamaraan upang makalkula angkabuuan
int Resulta()
{
bumalik kanumber1 + number2 + number3;
}
};
int pangunahing()
{
//Ipahayag ang unang pointer
natatanging_ptr pointer1(bagong Karagdagan(Apat lima,55,30));

gastos<<'Ang resulta ng kabuuan gamit ang unang pointer:'<Resulta() <<' n';
//Ipahayag ang pangalawang pointer
natatanging_ptr pointer2;
//Ilipat ang unang pointer sa pangalawang pointer
pointer2 = ilipat(pointer1);

gastos<<'Ang resulta ng kabuuan gamit ang pangalawang pointer:'<Resulta() <<' n';
pagbabalik0;
}

Output:

Ang sumusunod na output ay lilitaw pagkatapos ipatupad ang code sa itaas. Ang kabuuan ng 45, 55, at 30 ay 130 na na-print para sa parehong mga payo.

Halimbawa 2: Lumikha ng isang Pointer Bagay ng isang Klase Sa Tagabuo at Destructor

Ang paraan upang ideklara ang isang natatanging object ng pointer ng isang klase na may tagabuo at destructor ay ipinakita sa sumusunod na halimbawa. Naglalaman ang klase ng isang tagapagbuo na may isang argument, isang pampublikong pamamaraan na pinangalanang Display () sa halaga ng variable ng klase, at isang destructor na magpi-print ng isang sirain na mensahe bago sirain ang bagay ng klase. Ang paraan ng Display () ay tinatawag pagkatapos ng paglikha ng natatanging object ng pointer sa code.

//Isama ang mga kinakailangang aklatan

# isama

# isama

usingnamespace std;

//Tukuyin ang klase
klase ng Customer
{
pangalan ng string;

pampubliko:
//Ipahayag ang tagapagbuo
Kostumer(tali n)
{
pangalan = n;
gastos<<'Ang mapagkukunan ay inilalaan. n';
}

//Ipahayag ang pamamaraan upang mai-print ang pangalan ng customer
walang bisa ang Display()
{
gastos<<'Ang pangalan ng customer ay:'<<pangalan<<' n';
}

//Ideklara ang destructor
~ Customer()
{
gastos<<'Ang mapagkukunan ay nawasak. n';
}
};
int pangunahing()
{
//Ilalaan ang mapagkukunang object na pagmamay-ari ng natatanging_ptr
natatanging_ptruPointer{bagong Customer('Mir Abbas') };
uPointer->Ipakita();
pagbabalik0;
}

Output:

Lilitaw ang sumusunod na output pagkatapos ipatupad ang code sa itaas:

Halimbawa 3: Suriin ang Pointer Pagkatapos Paglipat ng Pagmamay-ari

Ang paraan upang suriin ang pagmamay-ari ng natatanging pointer ay ipinakita sa sumusunod na halimbawa sa pamamagitan ng paglikha ng dalawang natatanging mga payo ng isang klase. Isang klase na may dalawang variable ng string at isang pampublikong pamamaraan ang naideklara sa code. Ang pamamaraan ng Book_details () ng klase ay tinawag pagkatapos likhain ang unang natatanging object ng pointer ng klase. Susunod, ang pangalawang natatanging object ng pointer ay nilikha, at ang unang pointer ay inilipat sa pangalawang pointer na sumisira sa unang pointer. Ang pagmamay-ari ng parehong mga payo ay dapat suriin sa paglaon.

//Isama ang mga kinakailangang aklatan

# isama

# isama

usingnamespace std;

//Tukuyin ang klase
aklat ng klase{

pamagat ng string ='Ang Wika sa Programming C ++';
may-akda ng string ='Bjarne Stroustrup';

pampubliko:
//Ipahayag ang pamamaraan upang mai-print ang mga detalye ng libro
voidBook_details()
{
gastos<<'Pangalan ng Libro:'<<pamagat<<' n';
gastos<<'Pangalan ng May-akda:'<<may akda<<' n';
}
};
int pangunahing()
{
//Ipahayag ang unang pointer
natatanging_ptr pointer1(Bagong libro());

pointer1->Mga Book_detail();
//Ipahayag ang pangalawang pointer
natatanging_ptr pointer2;
//Ilipat ang unang pointer sa pangalawang pointer
pointer2 = ilipat(pointer1);

//Suriin ang unang pointer
kung (static_cast(pointer1))gastos<<'Ang unang poiner ay hindi null n';
elsecout<<'Ang unang poiner ay null n';
//Suriin ang pangalawang pointer
kung (static_cast(pointer2))gastos<<'Ang pangalawang maninira ay hindi null n';
elsecout<<'Ang pangalawang maninira ay null n';

pagbabalik0;
}

Output:

Ang sumusunod na output ay lilitaw pagkatapos ipatupad ang code sa itaas. Ayon sa output, ang pagmamay-ari ng unang pointer ay tinanggal, at ang mensahe, Ang unang pointer ay null ay naka-print para sa unang pointer. Ang pagmamay-ari ng pangalawang pointer ay mayroon, at ang mensahe, Ang unang pointer ay hindi null ay naka-print para sa pangalawang pointer:

Konklusyon:

Ang mga layunin ng paggamit ng isang natatanging pointer sa C ++ na programa ay inilarawan sa tutorial na ito sa pamamagitan ng paggamit ng maraming mga halimbawa. Ang mga paraan upang lumikha ng isang natatanging pointer, ilipat ang pagmamay-ari ng pointer, at suriin ang kasalukuyang pagmamay-ari ng pointer ay ipinaliwanag dito upang matulungan ang mga mambabasa na malaman nang maayos ang paggamit ng natatanging pointer.