A C ++ egyedi_ptr használata

Use C Unique_ptr



Az intelligens mutatókat az erőforrás dinamikus elosztására használják. Sokféle intelligens mutatót használnak a C ++ nyelven különböző célokra, mint pl auto_ptr , egyedi_ptr , és shared_ptr . Az auto_ptr mutató elavult a C ++ új verziójában. Az egyedi_ptr az auto_ptr helyettesítésére szolgál. Ennek a mutatónak az objektuma birtokba veheti a mutatót. Ennek a mutatónak az objektuma egyedileg birtokolja a mutatót, és egyetlen más mutató sem mutathat az objektumra. Az egyedi_ptr automatikusan törli az objektumokat. Ez a mutató kezeli ezeket az objektumokat, ha az objektumok megsemmisülnek, vagy az objektum értéke megváltozik, vagy a reset () függvényt hívják meg. Az egyedi_ptr jellemzőit és ennek a mutatónak a használatát tárgyalja ez az oktatóanyag.

Fő összetevők:







Az egyedi_ptr objektum két fő összetevőjét az alábbiakban ismertetjük:



A. Tárolt mutató:



Az egyedi mutató által létrehozott objektumok kezelésére szolgál. A mutató létrehozásakor jön létre, és különböző módon módosítható.





B. Tárolt törlő:

A kezelt objektum törléséhez használt tárolt mutatótípus argumentumát veszi figyelembe. A mutató létrehozásakor is létrejön, és különböző módon lehet megváltoztatni.



1. példa: Hozzon létre egy mutatóobjektumot egy osztályban a konstruktorral

Az osztály egyedi mutatóobjektumainak deklarálása és az osztály metódusának elérése az alábbi példában látható objektumok használatával történik. A kódban deklarált egy konstruktorral és nyilvános metódussal rendelkező osztály. A konstruktornak három érve van. Az első egyedi mutatót úgy hozták létre, hogy három argumentumértékkel hívták meg a konstruktőrt. Az Eredmény() metódust hívja a mutatóobjektum, amely kiszámítja a konstruktor három argumentumértékének összegét. Ezután létrejön a második egyedi mutatóobjektum a konstruktor meghívása nélkül, és az első mutató a második mutatóra kerül. Az Eredmény() metódust a második mutatóobjektum hívja meg.

//Tartalmazza a szükséges könyvtárakat

#befoglalni

#befoglalni

usingnamespace std;

//Határozza meg az osztályt
osztály Kiegészítés{

int szám1, szám2, szám3;
nyilvános:
//Nyilatkozzon a konstruktőrről
Kiegészítés(int a, int b, int c)
{
szám1 = a;
szám2 = b;
szám3 = c;
}
//Nyújtsa be a számítási módszertösszeg
int Eredmény()
{
Visszatérésszám1 + szám2 + szám3;
}
};
int fő()
{
//Nyújtsa be az első mutatót
egyedi_ptr mutató1(új kiegészítés(Négy öt,55,30));

költség<<'Az összeg eredménye az első mutató használatával:'<Eredmény() <<' n';
//Nyújtsa be a második mutatót
egyedi_ptr mutató2;
//Mozgassa az első mutatót a második mutatóra
mutató2 = mozgás(mutató1);

költség<<'Az összeg eredménye a második mutató használatával:'<Eredmény() <<' n';
return0;
}

Kimenet:

A fenti kód végrehajtása után a következő kimenet jelenik meg. A 45, 55 és 30 összeg 130, amelyet mindkét mutatóra kinyomtattak.

Példa 2: Hozzon létre egy mutató objektumot egy osztályban konstruktorral és rombolóval

A következő példában bemutattuk, hogyan lehet deklarálni egy osztály egyedi mutatóobjektumát konstruktorral és destruktorral. Az osztály egy konstruktort tartalmaz egy argumentummal, egy nyilvános metódust Display () az osztályváltozó értékéhez, és egy destruktort, amely kinyomtat egy megsemmisítési üzenetet, mielőtt megsemmisíti az osztály objektumát. A Display () metódust az egyedi mutatóobjektum létrehozása után hívják meg a kódban.

//Tartalmazza a szükséges könyvtárakat

#befoglalni

#befoglalni

usingnamespace std;

//Határozza meg az osztályt
osztályú Ügyfél
{
karakterlánc neve;

nyilvános:
//Nyilatkozzon a konstruktőrről
Vevő(karakterlánc n)
{
név = n;
költség<<„Az erőforrást kiosztják. n';
}

//Nyilatkozat módszer az ügyfél nevének kinyomtatására
üres kijelző()
{
költség<<'Az ügyfél neve:'<<név<<' n';
}

//Nyilvánítsd a rombolót
~ Ügyfél()
{
költség<<- Az erőforrás megsemmisült. n';
}
};
int fő()
{
//Rendelje le az egyedi_ptr tulajdonában lévő erőforrás -objektumot
unique_ptruPointer{új vevő('Mir Abbas') };
uPointer->Kijelző();
return0;
}

Kimenet:

A fenti kód végrehajtása után a következő kimenet jelenik meg:

3. példa: Ellenőrizze a mutatót a tulajdonjog átruházása után

Az egyedi mutató tulajdonjogának ellenőrzésének módja az alábbi példában látható egy osztály két egyedi mutatójának létrehozásával. A kódban két karakterláncváltozóval és nyilvános metódussal rendelkező osztály került deklarálásra. Az osztály Book_details () metódusát az osztály első egyedi mutató objektumának létrehozása után hívják meg. Ezután létrehozták a második egyedi mutatóobjektumot, és az első mutatót áthelyezték a második mutatóba, amely megsemmisíti az első mutatót. Mindkét mutató tulajdonjogát később ellenőrizni kell.

//Tartalmazza a szükséges könyvtárakat

#befoglalni

#befoglalni

usingnamespace std;

//Határozza meg az osztályt
osztályos Könyv{

karakterlánc címe ='A C ++ programozási nyelv';
karakterlánc szerzője ='Bjarne Stroustrup';

nyilvános:
//Nyújtsa be a könyv részleteinek nyomtatási módszerét
voidBook_details()
{
költség<<'Könyv neve:'<<cím<<' n';
költség<<'Szerző neve:'<<szerző<<' n';
}
};
int fő()
{
//Nyújtsa be az első mutatót
egyedi_ptr mutató1(új könyv());

mutató1->Book_details();
//Nyújtsa be a második mutatót
egyedi_ptr mutató2;
//Mozgassa az első mutatót a második mutatóra
mutató2 = mozgás(mutató1);

//Ellenőrizze az első mutatót
ha (static_cast(mutató1))költség<<- Az első mutató nem nulla n';
egyebkent<<- Az első mutató nulla n';
//Ellenőrizze a második mutatót
ha (static_cast(mutató2))költség<<- A második mutató nem nulla n';
egyebkent<<- A második mutató nulla n';

return0;
}

Kimenet:

A fenti kód végrehajtása után a következő kimenet jelenik meg. A kimenet szerint az első mutató tulajdonjogát eltávolítottuk, és az üzenet Az első mutató nulla kinyomtatta az első mutatót. A második mutató tulajdonjoga létezik, és az üzenet Az első mutató nem nulla kinyomtatta a második mutatót:

Következtetés:

Az egyedi mutató C ++ programozásban való használatának céljait ebben az oktatóanyagban több példa segítségével ismertettük. Az egyedi mutató létrehozásának, a mutató tulajdonjogának átruházásának és a mutató jelenlegi tulajdonjogának ellenőrzésének módjait itt ismertettük, hogy segítsük az olvasókat az egyedi mutató helyes használatában.