boost::interprocess::intrusive_ptr
// In header: <boost/interprocess/smart_ptr/intrusive_ptr.hpp> template<typename T, typename VoidPointer> class intrusive_ptr { public: // types typedef boost::intrusive::pointer_traits< VoidPointer >::template rebind_pointer< T >::type pointer; // Provides the type of the internal stored pointer. typedef T element_type; // Provides the type of the stored pointer. // public member functions intrusive_ptr() noexcept; intrusive_ptr(const pointer &, bool = true) noexcept; intrusive_ptr(intrusive_ptr const &) noexcept; intrusive_ptr(intrusive_ptr &&) noexcept; template<typename U> intrusive_ptr(intrusive_ptr< U, VP > const &) noexcept; ~intrusive_ptr(); intrusive_ptr & operator=(BOOST_COPY_ASSIGN_REF(intrusive_ptr)) noexcept; intrusive_ptr & operator=(intrusive_ptr &&) noexcept; template<typename U> intrusive_ptr & operator=(intrusive_ptr< U, VP > const &) noexcept; intrusive_ptr & operator=(pointer) noexcept; void reset() noexcept; pointer & get() noexcept; const pointer & get() const noexcept; T & operator*() const noexcept; const pointer & operator->() const noexcept; pointer & operator->() noexcept; operator unspecified_bool_type() const noexcept; bool operator!() const noexcept; void swap(intrusive_ptr &) noexcept; };
intrusive_ptr 类模板存储指向带有嵌入式引用计数的对象的指针。 intrusive_ptr 以 T(指向的对象类型)和 VoidPointer(定义 intrusive_ptr 将存储的指针类型的 void 指针类型)为参数。 intrusive_ptr<T, void <em>> 定义了一个具有 T 成员的类,而 intrusive_ptr<T, offset_ptr<void> > 定义了一个具有 offset_ptr<T> 成员的类。 依赖于对以下项的非限定调用:
void intrusive_ptr_add_ref(T * p) BOOST_NOEXCEPT; void intrusive_ptr_release(T * p) BOOST_NOEXCEPT;
当 (p != 0) 时
对象负责销毁自身。
intrusive_ptr
公有成员函数intrusive_ptr() noexcept;
构造函数。 初始化内部指针为 0。 不抛出异常
intrusive_ptr(const pointer & p, bool add_ref = true) noexcept;
构造函数。 复制指针,如果 “p” 不为零且 “add_ref” 为真,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常
intrusive_ptr(intrusive_ptr const & rhs) noexcept;
复制构造函数。 复制内部指针,如果 “p” 不为零,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常
intrusive_ptr(intrusive_ptr && rhs) noexcept;移动构造函数。 移动内部指针。 不抛出异常。
template<typename U> intrusive_ptr(intrusive_ptr< U, VP > const & rhs) noexcept;
从相关类型构造。 复制内部指针,如果 “p” 不为零,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常
~intrusive_ptr();析构函数。 调用 reset()。 不抛出异常。
intrusive_ptr & operator=(BOOST_COPY_ASSIGN_REF(intrusive_ptr) rhs) noexcept;
赋值运算符。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常
intrusive_ptr & operator=(intrusive_ptr && rhs) noexcept;
移动赋值运算符 不抛出异常
template<typename U> intrusive_ptr & operator=(intrusive_ptr< U, VP > const & rhs) noexcept;
从相关类型赋值。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常
intrusive_ptr & operator=(pointer rhs) noexcept;
从指针赋值。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常
void reset() noexcept;
释放内部指针并将其设置为 0。 如果内部指针不为 0,则调用 intrusive_ptr_release(to_raw_pointer(m_ptr))。 不抛出异常
pointer & get() noexcept;
返回对内部指针的引用。 不抛出异常
const pointer & get() const noexcept;
返回对内部指针的引用。 不抛出异常
T & operator*() const noexcept;
返回 *get()。 不抛出异常
const pointer & operator->() const noexcept;
返回 *get()。 不抛出异常
pointer & operator->() noexcept;
返回 get()。 不抛出异常
operator unspecified_bool_type() const noexcept;
转换为布尔值。 不抛出异常
bool operator!() const noexcept;
非运算符。 不抛出异常
void swap(intrusive_ptr & rhs) noexcept;
交换两个智能指针的内容。 不抛出异常