From eec8452546d6630ecb479b93d1d95c1901b97e61 Mon Sep 17 00:00:00 2001
From: Peter Gerwinski <peter.gerwinski@hs-bochum.de>
Date: Mon, 13 Jun 2022 08:17:19 +0200
Subject: [PATCH] Beispiele 9.6.2022

---
 20220609/shared-pointer-01.cpp |  9 +++++++++
 20220609/shared-pointer-02.cpp | 10 ++++++++++
 20220609/shared-pointer-03.cpp | 11 +++++++++++
 20220609/shared-pointer-04.cpp | 10 ++++++++++
 20220609/shared-pointer-05.cpp | 15 +++++++++++++++
 20220609/shared-pointer-06.cpp | 15 +++++++++++++++
 20220609/shared-pointer-07.cpp | 14 ++++++++++++++
 20220609/shared-pointer-08.cpp | 17 +++++++++++++++++
 20220609/shared-pointer-09.cpp | 20 ++++++++++++++++++++
 9 files changed, 121 insertions(+)
 create mode 100644 20220609/shared-pointer-01.cpp
 create mode 100644 20220609/shared-pointer-02.cpp
 create mode 100644 20220609/shared-pointer-03.cpp
 create mode 100644 20220609/shared-pointer-04.cpp
 create mode 100644 20220609/shared-pointer-05.cpp
 create mode 100644 20220609/shared-pointer-06.cpp
 create mode 100644 20220609/shared-pointer-07.cpp
 create mode 100644 20220609/shared-pointer-08.cpp
 create mode 100644 20220609/shared-pointer-09.cpp

diff --git a/20220609/shared-pointer-01.cpp b/20220609/shared-pointer-01.cpp
new file mode 100644
index 0000000..c12bdc6
--- /dev/null
+++ b/20220609/shared-pointer-01.cpp
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main ()
+{
+  int *a = new int (42);
+  int *b = a;
+  printf ("b = %d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-02.cpp b/20220609/shared-pointer-02.cpp
new file mode 100644
index 0000000..f54578b
--- /dev/null
+++ b/20220609/shared-pointer-02.cpp
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+int main ()
+{
+  int *a = new int (42);
+  int *b = a;
+  delete a;
+  printf ("b = %d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-03.cpp b/20220609/shared-pointer-03.cpp
new file mode 100644
index 0000000..fac8189
--- /dev/null
+++ b/20220609/shared-pointer-03.cpp
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int main ()
+{
+  int *a = new int (42);
+  int *b = a;
+  delete a;
+  printf ("b = %d\n", *b);
+  delete b;
+  return 0;
+}
diff --git a/20220609/shared-pointer-04.cpp b/20220609/shared-pointer-04.cpp
new file mode 100644
index 0000000..97031a4
--- /dev/null
+++ b/20220609/shared-pointer-04.cpp
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  std::shared_ptr <int> a (new int (42));
+  std::shared_ptr <int> b = a;
+  printf ("%d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-05.cpp b/20220609/shared-pointer-05.cpp
new file mode 100644
index 0000000..b1d3c60
--- /dev/null
+++ b/20220609/shared-pointer-05.cpp
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  std::shared_ptr <int> b;
+  {
+    std::shared_ptr <int> a (new int (42));
+    b = a;
+    // Ohne die Zuweisung an b würde hier der für die Integer allozierte Speicher
+    // automatisch freigegeben, sobald der Zeiger a verschwindet.
+  }
+  printf ("%d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-06.cpp b/20220609/shared-pointer-06.cpp
new file mode 100644
index 0000000..18305fb
--- /dev/null
+++ b/20220609/shared-pointer-06.cpp
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  int *b;
+  {
+    int *a = new int (42);
+    b = a;
+    // Ohne die Zuweisung an b würde hier der für die Integer allozierte Speicher
+    // nicht automatisch freigegeben, sobald der Zeiger a verschwindet. --> Speicherleck
+  }
+  printf ("%d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-07.cpp b/20220609/shared-pointer-07.cpp
new file mode 100644
index 0000000..6ed2dec
--- /dev/null
+++ b/20220609/shared-pointer-07.cpp
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  int *b;
+  {
+    int *a = new int (42);
+    b = a;
+    delete a;  // Problem: b zeigt noch auf den freigegebenen Speicher.
+  }
+  printf ("%d\n", *b);
+  return 0;
+}
diff --git a/20220609/shared-pointer-08.cpp b/20220609/shared-pointer-08.cpp
new file mode 100644
index 0000000..033d1f6
--- /dev/null
+++ b/20220609/shared-pointer-08.cpp
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  std::weak_ptr <int> b;
+  {
+    std::shared_ptr <int> a (new int (42));
+    b = a;  // zeigt auf denselben Speicherplatz, ist aber kein "Besitzer",
+  }         // d.h., mit dem Verschwinden von a wird der Speicherplatz freigegeben.
+
+  auto c = b.lock ();  // Prüfe, ob der Speicher noch da ist.
+                       // Falls ja, erzeuge einen shared_ptr c.
+
+  printf ("%d\n", *c);   // c == NULL
+  return 0;
+}
diff --git a/20220609/shared-pointer-09.cpp b/20220609/shared-pointer-09.cpp
new file mode 100644
index 0000000..82ba13b
--- /dev/null
+++ b/20220609/shared-pointer-09.cpp
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <memory>
+
+int main ()
+{
+  std::weak_ptr <int> b;
+  {
+    std::shared_ptr <int> a (new int (42));
+    b = a;  // zeigt auf denselben Speicherplatz, ist aber kein "Besitzer",
+  }         // d.h., mit dem Verschwinden von a wird der Speicherplatz freigegeben.
+
+  auto c = b.lock ();  // Prüfe, ob der Speicher noch da ist.
+                       // Falls ja, erzeuge einen shared_ptr c.
+
+  if (c)   // c == NULL, weil der Speicherplatz bereits freigegeben wurde.
+    printf ("%d\n", *c);
+  else
+    printf ("Speicher wurde bereits freigegeben.\n");
+  return 0;
+}
-- 
GitLab