Du bist hier: Startseite > Entwicklung (C/C++) > C++ Erweitert > Unique Pointer

Unique Pointer

Bei der Verwendung von normalen Pointern (Zeiger) kann es schnell passieren, dass man ein Memoryleak verursacht, sofern man die Pointer Variable nicht mit delete wieder löscht. Damit sowas nicht passiert, kann man Unique Pointer verwenden. Sie löschen sich selbstständig sobald der Gültigkeitsbereich indem er erstellt wurde, wieder verlassen wurde. Unique Pointer sind einmalig und können nicht kopiert aber mit der Funktion move() verschoben werden.

Im folgendem Beispiel erstellen wir zuerst eine Klasse die wir Objekt nennen. Beim initialisieren gibt sie das Wort "Konstrukt" auf dem Bildschirm aus. Wenn sie zerstört wird, erscheint "Destrukt" auf dem Bildschirm. In unserer main() Funktion referenzieren wir mit dem Unique Pointer auf genau dieses Objekt.

Datei:  Quelldateien/main.cpp
  1. #include <iostream> // std::cout, std::endl, std::cin
  2. #include <stdlib.h> // EXIT_SUCCESS
  3. #include <memory> // unique pointer
  4.  
  5. class Object
  6. {
  7. public:
  8. Object()
  9. {
  10. std::cout << "Konstrukt" << std::endl;
  11. }
  12. ~Object()
  13. {
  14. std::cout << "Destrukt" << std::endl;
  15. }
  16. void methode(void)
  17. {
  18. std::cout << "Methode" << std::endl;
  19. }
  20. };
  21.  
  22. int main(void)
  23. {
  24. { // Gültigkeitsbereich Anfang
  25. std::unique_ptr<Object> uPObjekt1(new Object);
  26. std::unique_ptr<Object> uPObjekt2 = std::move(uPObjekt1); // Verschieben von uPObjekt1 nach uPObjekt2
  27. uPObjekt2->methode();
  28. } // Gültigkeitsbereich Ende, Destruktor wird ausgeführt
  29. std::cout << "Bereich verlassen" << std::endl;
  30.  
  31. std::cin.get();
  32. return EXIT_SUCCESS;
  33. }

In Zeile 24 wird ein neuer Gültigkeitsbereich erstellt. Danach wird das Objekt via Unique Pointer initialisiert. In der nächsten Zeile verschieben wir denn Pointer, danach rufen wir eine Methode auf und dann schliesst der Gültigkeitsbereich. An dieser Stelle killt der Unique Pointer das Objekt und ruft automatisch denn Destruktor auf.

Kommentare zu diesem Beitrag

Sie müssen angemeldet sein, um eine Nachricht zu erstellen. Anmelden »