Shared Pointer
Genau wie der Unique Pointer gehört der Shared Pointer zu den intelligenten Smart Pointern. Er zerstört sich selbstständig sobald der Gültigkeitsbereich verlassen worden ist. Im Gegensatz zum Unique Pointer können mehrere Shared Pointer auf das gleiche Objekt zeigen. Der Shared Pointer hat einen internen Objekt-Count-Zähler, der mitzählt, wie viele Pointer auf ein Objekt zeigen. Wenn dieser Wert auf 0 wechselt, zerstört sich das Shared Pointer Objekt selbst.
Im Beispiel verwenden wir wieder eine Klasse die beim initialisieren und beim zerstören des Objekts einen Text auf dem Bildschirm ausgibt.
Datei:
Quelldateien/main.cpp- #include <iostream> // std::cout, std::endl, std::cin
- #include <stdlib.h> // EXIT_SUCCESS
- #include <memory> // shared pointer
-
- class Object
- {
- public:
- Object()
- {
- std::cout << "Konstrukt" << std::endl;
- }
- ~Object()
- {
- std::cout << "Destrukt" << std::endl;
- }
- };
-
- int main(void)
- {
- {
-
- std::shared_ptr<Object> sPObj1(new Object);
- std::shared_ptr<Object> sPObj2 = sPObj1;
- std::cout << sPObj1.use_count() << std::endl; // 2
-
- {
- std::shared_ptr<Object> sPObj3 = sPObj1;
- std::cout << sPObj1.use_count() << std::endl; // 3
- }
-
- std::cout << sPObj1.use_count() << std::endl; // 2
-
- } // <- Objekt wird zerstört
-
-
- std::cin.get();
- return EXIT_SUCCESS;
- }
Mit "std::cout << sPObj1.use_count() << std::endl;" lassen wir uns immer die aktuelle Benutzung anzeigen. In Zeile 33 endet der Gültigkeitsbereich für den Pointer und er zerstört das Objekt Ordnungsgemäß.