diff --git a/20220609/shared-pointer-01.cpp b/20220609/shared-pointer-01.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c12bdc61ea8c8fd6ed9e448971b6764094fadc3b
--- /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 0000000000000000000000000000000000000000..f54578b48309c42d7712297957949c064a3ded40
--- /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 0000000000000000000000000000000000000000..fac8189ee62b8854fbfb910601bf3c7ce072e489
--- /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 0000000000000000000000000000000000000000..97031a41697297749280b56f83731284b08c2890
--- /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 0000000000000000000000000000000000000000..b1d3c60ba4f5e484fdd316d2b06cb20415baa14f
--- /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 0000000000000000000000000000000000000000..18305fbd2dd3d61ab1cc1ddd220a9db7bb86d716
--- /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 0000000000000000000000000000000000000000..6ed2decbffb2e4be4db10a3a363de830401620e5
--- /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 0000000000000000000000000000000000000000..033d1f69385d3bf0f0eb65ca79f2931360e8733a
--- /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 0000000000000000000000000000000000000000..82ba13bc049c190b04787d8c2617cac2ad286396
--- /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;
+}