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

Class shared_ptr_thread_safe

dlib/smart_pointers/shared_ptr_thread_safe.h:55–389  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53
54 template<typename T>
55 class shared_ptr_thread_safe
56 {
57 /*!
58 CONVENTION
59 - get() == data
60 - unique() == (shared_node != 0) && (shared_node->ref_count == 1)
61 - if (shared_node != 0) then
62 - use_count() == shared_node->ref_count
63 - get() == a valid pointer
64 - if (we are supposed to use the deleter) then
65 - shared_node->del == the deleter to use
66 - else
67 - shared_node->del == 0
68 - else
69 - use_count() == 0
70 - get() == 0
71
72 !*/
73
74 template <typename D>
75 struct deleter_template : public shared_ptr_thread_safe_deleter
76 {
77 deleter_template(const D& d_) : d(d_) {}
78 void del(const void* p) { d((T*)p); }
79 D d;
80
81 void* get_deleter_void(const std::type_info& t) const
82 {
83 if (typeid(D) == t)
84 return (void*)&d;
85 else
86 return 0;
87 }
88 };
89
90 public:
91
92 typedef T element_type;
93
94 shared_ptr_thread_safe(
95 ) : data(0), shared_node(0) {}
96
97 template<typename Y>
98 explicit shared_ptr_thread_safe(
99 Y* p
100 ) : data(p)
101 {
102 DLIB_ASSERT(p != 0,
103 "\tshared_ptr::shared_ptr_thread_safe(p)"
104 << "\n\tp can't be null"
105 << "\n\tthis: " << this
106 );
107 try
108 {
109 shared_node = new shared_ptr_thread_safe_node;
110 }
111 catch (...)
112 {

Callers 1

resetMethod · 0.70

Calls 1

swapMethod · 0.45

Tested by

no test coverage detected