10 static bool canDelete(_T_*)
20 template<
typename _T_,
typename _TDeleteCheck_ = details::SharedRefDefaultCheck>
23 template<
typename _TOther_,
typename _TDeleteCheckOther_>
26 typedef _T_ ElementType;
42 SharedRef& operator=(
const SharedRef<_T_, _TDeleteCheck_>& _rhs)
44 if(_rhs.m_data != m_data)
59 template<
typename _TCast_>
64 if(m_data and
dynamic_cast<_TCast_*
>(m_data->t))
66 res.m_data =
reinterpret_cast<typename CastSharedRef::Data*
>(m_data);
74 template<
typename _TCast_, std::enable_if_t<std::is_base_of_v<_TCast_, _T_>,
bool> = true>
81 res.m_data =
reinterpret_cast<typename CastSharedRef::Data*
>(m_data);
89 return m_data == _rhs.m_data or m_data->t == _rhs.m_data->t;
91 bool operator==(
const _T_* _rhs)
const
93 return (m_data and m_data->t == _rhs) or (not m_data and not _rhs);
95 operator bool ()
const
97 return m_data and m_data->t;
102 return m_data and m_data->t;
108 const _T_* operator->()
const
124 const _T_* data()
const
134 if(m_data->count == 0)
136 if(m_data->own and _TDeleteCheck_::canDelete(m_data->t))
145 void ref(
const SharedRef<_T_, _TDeleteCheck_>& _rhs)
147 m_data = _rhs.m_data;
157 Data(
const Data& _rhs) =
delete;
159 std::atomic<int> count;
Definition SharedRef.h:22
SharedRef< _TCast_, _TDeleteCheck_ > d_cast() const
Definition SharedRef.h:60
SharedRef(_T_ *_t, bool _own)
Definition SharedRef.h:34
_T_ * grab()
Definition SharedRef.h:115
SharedRef< _TCast_, _TDeleteCheck_ > s_cast() const
Definition SharedRef.h:75