24 #include <boost/intrusive/list.hpp>
45 using hook_type = boost::intrusive::list_member_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>;
59 _hook.swap_nodes(o._hook);
69 explicit operator bool()
const noexcept {
return _ptr !=
nullptr; }
70 T* operator->()
const noexcept {
return _ptr; }
71 T& operator*()
const noexcept {
return *_ptr; }
72 T* get()
const noexcept {
return _ptr; }
73 bool operator==(
const weak_ptr& o)
const noexcept {
return _ptr == o._ptr; }
74 bool operator!=(
const weak_ptr& o)
const noexcept {
return _ptr != o._ptr; }
96 boost::intrusive::list<weak_ptr<T>,
97 boost::intrusive::member_hook<weak_ptr<T>,
typename weak_ptr<T>::hook_type, &
weak_ptr<T>::_hook>,
98 boost::intrusive::constant_time_size<false>> _ptr_list;
108 _ptr_list.clear_and_dispose([] (
weak_ptr<T>* wp) noexcept {
114 _ptr_list.push_back(ptr);