1. példa: A megosztott mutató deklarálása különböző módokon
A megosztott mutató deklarálásának három különböző módja látható a következő példában. A kódban deklarált egy konstruktorral és nyilvános metódussal rendelkező osztály. A konstruktor üzenetet nyomtat, amikor új megosztott objektum jön létre a konstruktorral. Az Kijelző() metódus az üzeneteket a hívó megosztott mutatóobjektum alapján nyomtatja ki. Itt jött létre az első megosztott mutatóobjektum a konstruktor meghívása nélkül. A második megosztott mutatóobjektumot a konstruktor hívásával hozták létre. A harmadik megosztott mutató az első megosztott mutató hozzárendelésével jött létre. Az Kijelző() metódust háromszor hívták meg három megosztott mutatóobjektum használatával.
// Tartalmazza a szükséges könyvtárakat
#befoglalni
#befoglalni
usingnamespacestd;
// Határozza meg az osztályt
classMyClass{
nyilvános:
// Nyilatkozzon a konstruktőrről
Az osztályom() {
költség<<- A konstruktőrt hívják. n';
}
// A szöveg nyomtatási módszerének deklarálása
voidDisplay(string str)
{
költség<<'A Display () metódust a'<<o<<'mutató. n';
}
};
intmain()
{
// A shared_ptr inicializálása a konstruktor meghívása nélkül
shared_ptr p1=make_shared();
p1->Kijelző('első');
// A shared_ptr inicializálása a konstruktor hívásával
shared_ptr p2=shared_ptr(newMyClass);
p2->Kijelző('második');
// A shared_ptr inicializálása hozzárendeléssel
shared_ptr 3. oldal=p1;
p3->Kijelző('harmadik');
visszatérés0;
}
Kimenet:
A fenti kód végrehajtása után a következő kimenet jelenik meg. A konstruktor csak a második objektum létrehozásakor hívott. Tehát a konstruktor üzenete csak egyszer lett kinyomtatva:
2. példa: Nyomtassa ki a tárolt megosztott mutató helyét
A get () függvény megosztott mutatója a tárolt, megosztott mutató helyének visszaadására szolgál. A következő példa kinyomtatja az osztály és a függvény által létrehozott tárolt, megosztott mutatók helyét. Itt egy konstruktorral rendelkező osztályt definiáltak egy megosztott mutató létrehozásához. A függvény bejelentette, hogy létrehoz egy megosztott mutatót, és kinyomtatja a megosztott mutató helyét a get () függvénnyel. Ebben a kódban az első megosztott mutatót az osztály használatával hozták létre, a második megosztott mutatót a függvény használatával, a harmadik megosztott mutatót pedig az első mutató hozzárendelésével hozták létre.
// Tartalmazza a szükséges könyvtárakat#befoglalni
#befoglalni
usingnamespacestd;
// Határozza meg az osztályt
classMyClass
{
nyilvános:
// Nyilatkozzon a konstruktőrről
Az osztályom() {
költség<<- A konstruktőrt hívják. n';
}
};
// Határozza meg a mutató inicializálására szolgáló funkciót
voidInit_shared_ptr()
{
shared_ptr p2(newMyClass);
költség<<p2.kap() <<' n';
}
intmain()
{
// A shared_ptr inicializálása a konstruktor hívásával
shared_ptr p1=shared_ptr(newMyClass);
költség<<p1.kap() <<' n';
// A shared_ptr inicializálása a függvény hívásával
Init_shared_ptr();
// A shared_ptr inicializálása hozzárendeléssel
shared_ptr 3. oldal=p1;
költség<<p3.kap() <<' n';
visszatérés0;
}
Kimenet:
A következő hasonló kimenet jelenik meg a fenti kód végrehajtása után. A kimenetben a get () függvény visszaadott értéke az első és a harmadik megosztott mutató esetében azonos. A második megosztott mutató azonban más:
3. példa: Számolja meg a megosztott mutatóobjektumokat
A következő példa bemutatja a megosztott mutató által mutatott objektumok számolásának módját a mutató létrehozása és megsemmisítése után. A kódban deklarált egy konstruktorral rendelkező osztály. Az első megosztott mutató az osztály használatával jött létre, a második pedig az első megosztott mutatóval. A mindkét megosztott mutató által a reset () függvény meghívása előtt és után mutatott objektumok száma később került kinyomtatásra.
// Tartalmazza a szükséges könyvtárakat#befoglalni
#befoglalni
usingnamespacestd;
// Határozza meg az osztályt
classMyClass{
nyilvános:
// Nyilatkozzon a konstruktőrről
Az osztályom() {
költség<<- A konstruktőrt hívják. n';
}
};
intmain()
{
// Inicializálja az első shared_ptr -t a konstruktor hívásával
shared_ptr p1(newMyClass);
// A shared_ptr objektumok számának megjelenítése az első mutató alapján
költség<<'p1 mutat'<<p1.use_count() <<'tárgy (ok). n';
// Inicializálja a második shared_ptr -t az első shared_ptr használatával
shared_ptr p2(p1);
// A shared_ptr objektumok számának megjelenítése az első és a második mutató szerint
költség<<'p2 rámutat'<<p2.use_count() <<'tárgy (ok). n';
költség<<'p1 mutat'<<p1.use_count() <<'tárgy (ok). n';
// Az első mutató tulajdonjogának eltávolítása a shared_ptr objektumból
p1.Visszaállítás();
// A shared_ptr objektumok számának megjelenítése a második mutatóval
költség<<'p2 rámutat'<<p2.use_count() <<'tárgy (ok). n';
visszatérés0;
}
Kimenet:
A fenti kód végrehajtása után a következő kimenet jelenik meg. Az első mutató, p1 , létrehozás után egy objektumra mutat. A második mutató létrehozása után p2 , az első mutató használatával, p1 , mindkét mutató két objektumra mutat a mutató megosztása érdekében. Miután meghívta a mutató reset () függvényét, p1 , egy tárgy megsemmisült, és a mutató, p2 , most csak egy objektumra mutat.
Következtetés:
A C ++ nyelvű megosztott mutató használatának céljait ebben az oktatóanyagban egyszerű példákkal ismertettük. Megosztott mutatók létrehozása különböző módokon, tárolt megosztott mutató helyének lekérése és a megosztott mutatók által mutatott objektumok számának számítása. Remélem, hogy a C ++ kódolók az oktatóanyag elolvasása után képesek lesznek használni a megosztott mutatót a kódjukban.