27 Weak_ref_base(
void const *ptr =
nullptr) : _obj(ptr) {}
28 void reset_hard() { _obj =
nullptr; }
38 struct List : H_list_t<Weak_ref_base>
50 explicit operator bool ()
const
51 {
return _obj ? true :
false; }
95class Weak_ref :
public Weak_ref_base
99 {
return reinterpret_cast<T*
>(
const_cast<void *
>(_obj)); }
105 r->remove_weak_ref(
this);
109 n->add_weak_ref(
this);
114 Weak_ref(T *s =
nullptr) : Weak_ref_base(s)
117 s->add_weak_ref(
this);
120 ~Weak_ref() { reset(0); }
122 void operator = (T *n)
125 Weak_ref(Weak_ref
const &o) : Weak_ref_base(o._obj)
128 x->add_weak_ref(
this);
131 Weak_ref &operator = (Weak_ref
const &o)
140 T &operator * ()
const {
return get(); }
141 T *operator -> ()
const {
return get(); }
147 template <
typename T>
friend class Weak_ref;
153 void remove_weak_ref(Weak_ref_base *ref)
const
154 { weak_references.
remove(ref); }
Weak_ref_base * pop_front()
static void remove(T *e)
Remove the given element from its list.
void push_front(T *e)
Add element to the front of the list.
Generic (base) weak reference to some object.
Typed weak reference to an object of type T.
The list type for keeping all weak references to an object.