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

Class shared_ptr

dlib/smart_pointers/shared_ptr.h:78–418  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76
77 template<typename T>
78 class shared_ptr
79 {
80 /*!
81 CONVENTION
82 - get() == data
83 - unique() == (shared_node != 0) && (shared_node->ref_count == 1)
84 - if (shared_node != 0) then
85 - use_count() == shared_node->ref_count
86 - get() == a valid pointer
87 - if (we are supposed to use the deleter) then
88 - shared_node->del == the deleter to use
89 - else
90 - shared_node->del == 0
91 - else
92 - use_count() == 0
93 - get() == 0
94
95
96 - if (there are any weak_ptrs that reference this->data) then
97 - shared_node->weak_node->ref_count == the number of referencing weak_ptrs
98 - else
99 - shared_node->weak_node == 0
100 !*/
101
102 template <typename D>
103 struct deleter_template : public shared_ptr_deleter
104 {
105 deleter_template(const D& d_) : d(d_) {}
106 void del(const void* p) { d((T*)p); }
107 D d;
108
109 void* get_deleter_void(const std::type_info& t) const
110 {
111 if (typeid(D) == t)
112 return (void*)&d;
113 else
114 return 0;
115 }
116 };
117
118 struct default_deleter : public shared_ptr_deleter
119 {
120 void del(const void* p) { delete ((T*)p); }
121
122 void* get_deleter_void(const std::type_info&) const
123 {
124 return 0;
125 }
126 };
127
128 public:
129
130 typedef T element_type;
131
132 shared_ptr(
133 ) : data(0), shared_node(0) {}
134
135 template<typename Y>

Callers 2

resetMethod · 0.85

Calls 1

swapMethod · 0.45

Tested by

no test coverage detected