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; +}