21 #ifndef mia_singular_refobj_hh
22 #define mia_singular_refobj_hh
52 virtual void operator ()(T& MIA_PARAM_UNUSED(data))
const = 0;
93 TheObject(
const TheObject& data) =
delete;
94 TheObject&
operator = (
const TheObject& data) =
delete;
102 template <
typename T>
106 template <
typename T>
112 template <
typename T>
115 m_object =
new TheObject(data, d);
118 template <
typename T>
121 m_object = other.m_object;
127 template <
typename T>
133 m_object = other.m_object;
141 template <
typename T>
143 m_object(other.m_object)
145 other.m_object =
nullptr;
148 template <
typename T>
151 if (&other !=
this) {
155 m_object = other.m_object;
156 other.m_object =
nullptr;
163 template <
typename T>
167 if (m_object->del_ref())
171 template <
typename T>
174 return m_object->get();
177 template <
typename T>
181 return m_object->get_refcount();
186 template <
typename T>
194 template <
typename T>
197 assert(m_refcount == 0);
198 m_destructor(m_data);
201 template <
typename T>
207 template <
typename T>
211 return (m_refcount <= 0);
214 template <
typename T>
220 template <
typename T>