Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

类模板 intrusive_ptr

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 公有成员函数

  1. intrusive_ptr() noexcept;

    构造函数。 初始化内部指针为 0。 不抛出异常

  2. intrusive_ptr(const pointer & p, bool add_ref = true) noexcept;

    构造函数。 复制指针,如果 “p” 不为零且 “add_ref” 为真,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常

  3. intrusive_ptr(intrusive_ptr const & rhs) noexcept;

    复制构造函数。 复制内部指针,如果 “p” 不为零,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常

  4. intrusive_ptr(intrusive_ptr && rhs) noexcept;
    移动构造函数。 移动内部指针。 不抛出异常。
  5. template<typename U> 
      intrusive_ptr(intrusive_ptr< U, VP > const & rhs) noexcept;

    从相关类型构造。 复制内部指针,如果 “p” 不为零,则调用 intrusive_ptr_add_ref(to_raw_pointer(p))。 不抛出异常

  6. ~intrusive_ptr();
    析构函数。 调用 reset()。 不抛出异常。
  7. intrusive_ptr & operator=(BOOST_COPY_ASSIGN_REF(intrusive_ptr) rhs) noexcept;

    赋值运算符。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常

  8. intrusive_ptr & operator=(intrusive_ptr && rhs) noexcept;

    移动赋值运算符 不抛出异常

  9. template<typename U> 
      intrusive_ptr & operator=(intrusive_ptr< U, VP > const & rhs) noexcept;

    从相关类型赋值。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常

  10. intrusive_ptr & operator=(pointer rhs) noexcept;

    从指针赋值。 等效于 intrusive_ptr(r).swap(*this)。 不抛出异常

  11. void reset() noexcept;

    释放内部指针并将其设置为 0。 如果内部指针不为 0,则调用 intrusive_ptr_release(to_raw_pointer(m_ptr))。 不抛出异常

  12. pointer & get() noexcept;

    返回对内部指针的引用。 不抛出异常

  13. const pointer & get() const noexcept;

    返回对内部指针的引用。 不抛出异常

  14. T & operator*() const noexcept;

    返回 *get()。 不抛出异常

  15. const pointer & operator->() const noexcept;

    返回 *get()。 不抛出异常

  16. pointer & operator->() noexcept;

    返回 get()。 不抛出异常

  17. operator unspecified_bool_type() const noexcept;

    转换为布尔值。 不抛出异常

  18. bool operator!() const noexcept;

    非运算符。 不抛出异常

  19. void swap(intrusive_ptr & rhs) noexcept;

    交换两个智能指针的内容。 不抛出异常


PrevUpHomeNext