MCPcopy Create free account
hub / github.com/davisking/dlib / weak_ptr

Class weak_ptr

dlib/smart_pointers/weak_ptr.h:17–205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15 typename T
16 >
17 class weak_ptr
18 {
19
20 /*!
21 CONVENTION
22 - if (weak_node != 0) then
23 - data == valid pointer to shared data
24 - weak_node->ref_count == the number of weak_ptrs that reference this->data
25 - else
26 - data == 0
27
28 - expired() == ((weak_node == 0) || (weak_node->shared_node == 0))
29 - if (expired() == false) then
30 - use_count() == weak_node->shared_node->ref_count
31 - else
32 - use_count() == 0
33 !*/
34
35 public:
36 typedef T element_type;
37
38 weak_ptr(
39 ) : data(0), weak_node(0)
40 {
41 }
42
43 template<typename Y>
44 weak_ptr(
45 const shared_ptr<Y>& r
46 )
47 {
48 data = r.data;
49 if (r.shared_node)
50 {
51 if (r.shared_node->weak_node)
52 {
53 weak_node = r.shared_node->weak_node;
54 weak_node->ref_count += 1;
55 }
56 else
57 {
58 weak_node = new weak_ptr_node(r.shared_node);
59 r.shared_node->weak_node = weak_node;
60 }
61 }
62 else
63 {
64 weak_node = 0;
65 }
66 }
67
68 weak_ptr(
69 const weak_ptr& r
70 )
71 {
72 data = r.data;
73 weak_node = r.weak_node;
74 if (weak_node)

Callers 1

resetMethod · 0.70

Calls 1

swapMethod · 0.45

Tested by

no test coverage detected