10 static bool canDelete(_T_*)
21 template<
typename _T_,
typename _TDeleteCheck_ = details::SharedRefDefaultCheck>
24 template<
typename _TOther_,
typename _TDeleteCheckOther_>
27 typedef _T_ ElementType;
41 SharedRef& operator=(
const SharedRef<_T_, _TDeleteCheck_>& _rhs)
43 if(_rhs.m_data != m_data)
50 ~SharedRef() { deref(); }
55 template<
typename _TCast_>
60 if(m_data and
dynamic_cast<_TCast_*
>(m_data->t))
62 res.m_data =
reinterpret_cast<typename CastSharedRef::Data*
>(
71 template<
typename _TCast_>
72 requires(std::is_base_of_v<_TCast_, _T_>)
79 res.m_data =
reinterpret_cast<typename CastSharedRef::Data*
>(
88 return m_data == _rhs.m_data or m_data->t == _rhs.m_data->t;
90 bool operator==(
const _T_* _rhs)
const
92 return (m_data and m_data->t == _rhs) or (not m_data and not _rhs);
94 operator bool()
const {
return m_data and m_data->t; }
96 bool isValid()
const {
return m_data and m_data->t; }
97 _T_* operator->() {
return m_data->t; }
98 const _T_* operator->()
const {
return m_data->t; }
107 _T_* data() {
return m_data->t; }
108 const _T_* data()
const {
return m_data->t; }
115 if(m_data->count == 0)
117 if(m_data->own and _TDeleteCheck_::canDelete(m_data->t))
126 void ref(
const SharedRef<_T_, _TDeleteCheck_>& _rhs)
128 m_data = _rhs.m_data;
138 Data(
const Data& _rhs) =
delete;
140 std::atomic<int> count;
Definition SharedRef.h:23
SharedRef< _TCast_, _TDeleteCheck_ > d_cast() const
Definition SharedRef.h:56
SharedRef(_T_ *_t, bool _own)
Definition SharedRef.h:34
_T_ * grab()
Definition SharedRef.h:102
SharedRef< _TCast_, _TDeleteCheck_ > s_cast() const
Definition SharedRef.h:73