1 /* 2 * shared_ptr_test.cpp 3 * 4 * Autor: H.Drachenfels 5 * Erstellt am: 10.12.2019 6 */
7 #include <iostream> // std::cout
8 #include <utility> // std::move
9 #include "htwg_shared_ptr.h"
10
11 int main()
12 {
13 htwg::shared_ptr<int> p{new int{123}}; // use_count = 1
14 std::cout << "*p = *"
15 << p.get() << '(' << p.use_count() << ") = " << *p << '\n';
16
17 auto q = p; // Copy-Konstruktor: ++use_count
18 if (q == p)
19 {
20 std::cout << "*p = *q = *"
21 << q.get() << '(' << q.use_count() << ") = " << *q << '\n';
22
23 htwg::shared_ptr<int> r;
24 if (r != q)
25 {
26 r = q; // Copy-Zusweisung: ++use_count
27 std::cout << "*p = *q = *r = *"
28 << r.get() << '(' << r.use_count() << ") = " << *r
29 << '\n';
30 }
31 } // Destruktor r: --use_count
32
33 q = q; // Copy-Selbstzuweisung
34 std::cout << "*p = *q = *"
35 << q.get() << '(' << q.use_count() << ") = " << *q << '\n';
36
37 auto r = std::move(q); // Move-Zuweisung
38 if (!q)
39 {
40 std::cout << "q = " << q.get() << '\n';
41 }
42
43 if (r)
44 {
45 std::cout << "*p = *r = *"
46 << r.get() << '(' << r.use_count() << ") = " << *r << '\n';
47 }
48 }
49 // Destruktor r: --use_count, Destruktor q, Destruktor p: --use_count -> delete
50