34 template <
class X>
class PointerPool;
39 explicit PoolPointer(X* p =
nullptr) : m_pointer(p), m_pPool(nullptr) { m_prev = m_next =
this; }
53 X&
operator*() const noexcept {
return *m_pointer; }
55 X*
get()
const noexcept {
return m_pointer; }
56 bool unique() const noexcept {
return m_prev ? m_prev == this :
true; }
73 m_pointer = p.m_pointer;
75 m_next->m_prev =
this;
80 (
const_cast<linked_ptr<X>*
>(&p))->m_next =
this;
88 if (m_pPool !=
nullptr) m_pPool->
release(m_pointer);
89 else delete m_pointer;
93 m_prev->m_next = m_next;
94 m_next->m_prev = m_prev;
95 m_prev = m_next =
nullptr;