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