Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

Class template intrusive_ptr

boost::interprocess::intrusive_ptr

Synopsis

// 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. 

  // construct/copy/destruct
  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 & 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;
  ~intrusive_ptr();

  // public member functions
  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;
};

Description

The intrusive_ptr class template stores a pointer to an object with an embedded reference count. intrusive_ptr is parameterized on T (the type of the object pointed to) and VoidPointer(a void pointer type that defines the type of pointer that intrusive_ptr will store). intrusive_ptr<T, void *> defines a class with a T* member whereas intrusive_ptr<T, offset_ptr<void> > defines a class with a offset_ptr<T> member. Relies on unqualified calls to:

void intrusive_ptr_add_ref(T * p) BOOST_NOEXCEPT; void intrusive_ptr_release(T * p) BOOST_NOEXCEPT;

with (p != 0)

The object is responsible for destroying itself.

intrusive_ptr public construct/copy/destruct

  1. intrusive_ptr() noexcept;

    Constructor. Initializes internal pointer to 0. Does not throw

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

    Constructor. Copies pointer and if "p" is not zero and "add_ref" is true calls intrusive_ptr_add_ref(to_raw_pointer(p)). Does not throw

  3. intrusive_ptr(intrusive_ptr const & rhs) noexcept;

    Copy constructor. Copies the internal pointer and if "p" is not zero calls intrusive_ptr_add_ref(to_raw_pointer(p)). Does not throw

  4. intrusive_ptr(intrusive_ptr && rhs) noexcept;
    Move constructor. Moves the internal pointer. Does not throw.
  5. template<typename U> 
      intrusive_ptr(intrusive_ptr< U, VP > const & rhs) noexcept;

    Constructor from related. Copies the internal pointer and if "p" is not zero calls intrusive_ptr_add_ref(to_raw_pointer(p)). Does not throw

  6. intrusive_ptr & operator=(BOOST_COPY_ASSIGN_REF(intrusive_ptr) rhs) noexcept;

    Assignment operator. Equivalent to intrusive_ptr(r).swap(*this). Does not throw

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

    Move Assignment operator Does not throw

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

    Assignment from related. Equivalent to intrusive_ptr(r).swap(*this). Does not throw

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

    Assignment from pointer. Equivalent to intrusive_ptr(r).swap(*this). Does not throw

  10. ~intrusive_ptr();
    Destructor. Calls reset(). Does not throw.

intrusive_ptr public member functions

  1. void reset() noexcept;

    Release internal pointer and set it to 0. If internal pointer is not 0, calls intrusive_ptr_release(to_raw_pointer(m_ptr)). Does not throw

  2. pointer & get() noexcept;

    Returns a reference to the internal pointer. Does not throw

  3. const pointer & get() const noexcept;

    Returns a reference to the internal pointer. Does not throw

  4. T & operator *() const noexcept;

    Returns *get(). Does not throw

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

    Returns *get(). Does not throw

  6. pointer & operator->() noexcept;

    Returns get(). Does not throw

  7. operator unspecified_bool_type() const noexcept;

    Conversion to boolean. Does not throw

  8. bool operator!() const noexcept;

    Not operator. Does not throw

  9. void swap(intrusive_ptr & rhs) noexcept;

    Exchanges the contents of the two smart pointers. Does not throw


PrevUpHomeNext