shared_ptr stores a pointer to a dynamically allocated object. More...
#include <shared_ptr.hpp>
Public Types | |
typedef T | element_type |
typedef T | value_type |
typedef boost::intrusive::pointer_traits < typename VoidAllocator::pointer > ::template rebind_pointer< T > ::type | pointer |
typedef ipcdetail::add_reference < value_type >::type | reference |
typedef ipcdetail::add_reference < const value_type >::type | const_reference |
typedef boost::intrusive::pointer_traits < typename VoidAllocator::pointer > ::template rebind_pointer < const Deleter >::type | const_deleter_pointer |
typedef boost::intrusive::pointer_traits < typename VoidAllocator::pointer > ::template rebind_pointer < const VoidAllocator >::type | const_allocator_pointer |
typedef void(this_type::* | unspecified_bool_type )() const |
Public Member Functions | |
shared_ptr () | |
Constructs an empty shared_ptr. More... | |
shared_ptr (const pointer &p, const VoidAllocator &a=VoidAllocator(), const Deleter &d=Deleter()) | |
Constructs a shared_ptr that owns the pointer p. More... | |
shared_ptr (const shared_ptr &r) | |
Copy constructs a shared_ptr. More... | |
shared_ptr (const shared_ptr &other, const pointer &p) | |
Constructs a shared_ptr that shares ownership with other and stores p. More... | |
template<class Y > | |
shared_ptr (shared_ptr< Y, VoidAllocator, Deleter > const &r) | |
If r is empty, constructs an empty shared_ptr. More... | |
template<class Y > | |
shared_ptr (weak_ptr< Y, VoidAllocator, Deleter > const &r) | |
Constructs a shared_ptr that shares ownership with r and stores a copy of the pointer stored in r. More... | |
shared_ptr (BOOST_RV_REF(shared_ptr) other) | |
Move-Constructs a shared_ptr that takes ownership of other resource and other is put in default-constructed state. More... | |
template<class Y > | |
shared_ptr (shared_ptr< Y, VoidAllocator, Deleter > const &r, ipcdetail::static_cast_tag) | |
template<class Y > | |
shared_ptr (shared_ptr< Y, VoidAllocator, Deleter > const &r, ipcdetail::const_cast_tag) | |
template<class Y > | |
shared_ptr (shared_ptr< Y, VoidAllocator, Deleter > const &r, ipcdetail::dynamic_cast_tag) | |
template<class Y > | |
shared_ptr & | operator= (shared_ptr< Y, VoidAllocator, Deleter > const &r) |
Equivalent to shared_ptr(r).swap(*this). More... | |
shared_ptr & | operator= (BOOST_COPY_ASSIGN_REF(shared_ptr) r) |
Equivalent to shared_ptr(r).swap(*this). More... | |
shared_ptr & | operator= (BOOST_RV_REF(shared_ptr) other) |
Move-assignment. More... | |
void | reset () |
This is equivalent to: this_type().swap(*this);. More... | |
template<class Pointer > | |
void | reset (const Pointer &p, const VoidAllocator &a=VoidAllocator(), const Deleter &d=Deleter()) |
This is equivalent to: this_type(p, a, d).swap(*this);. More... | |
template<class Y > | |
void | reset (shared_ptr< Y, VoidAllocator, Deleter > const &r, const pointer &p) |
reference | operator* () const |
Returns a reference to the pointed type. More... | |
pointer | operator-> () const |
Returns the pointer pointing to the owned object. More... | |
pointer | get () const |
Returns the pointer pointing to the owned object. More... | |
void | unspecified_bool_type_func () const |
operator unspecified_bool_type () const | |
bool | operator! () const |
Not operator. More... | |
bool | unique () const |
Returns use_count() == 1. More... | |
long | use_count () const |
Returns the number of shared_ptr objects, *this included, that share ownership with *this, or an unspecified nonnegative value when *this is empty. More... | |
void | swap (shared_ptr< T, VoidAllocator, Deleter > &other) |
Exchanges the contents of the two smart pointers. More... | |
template<class T2 , class A2 , class Deleter2 > | |
bool | _internal_less (shared_ptr< T2, A2, Deleter2 > const &rhs) const |
const_deleter_pointer | get_deleter () const |
Friends | |
template<class T2 , class A2 , class Deleter2 > | |
class | shared_ptr |
template<class T2 , class A2 , class Deleter2 > | |
class | weak_ptr |
shared_ptr stores a pointer to a dynamically allocated object.
The object pointed to is guaranteed to be deleted when the last shared_ptr pointing to it is destroyed or reset.
shared_ptr is parameterized on T (the type of the object pointed to), VoidAllocator (the void allocator to be used to allocate the auxiliary data) and Deleter (the deleter whose operator() will be used to delete the object.
The internal pointer will be of the same pointer type as typename VoidAllocator::pointer type (that is, if typename VoidAllocator::pointer is offset_ptr<void>, the internal pointer will be offset_ptr<T>).
Because the implementation uses reference counting, cycles of shared_ptr instances will not be reclaimed. For example, if main() holds a shared_ptr to A, which directly or indirectly holds a shared_ptr back to A, A's use count will be 2. Destruction of the original shared_ptr will leave A dangling with a use count of 1. Use weak_ptr to "break cycles."
typedef boost::intrusive:: pointer_traits<typename VoidAllocator::pointer>::template rebind_pointer<const VoidAllocator>::type boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::const_allocator_pointer |
typedef boost::intrusive:: pointer_traits<typename VoidAllocator::pointer>::template rebind_pointer<const Deleter>::type boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::const_deleter_pointer |
typedef ipcdetail::add_reference<const value_type>::type boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::const_reference |
typedef T boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::element_type |
typedef boost::intrusive:: pointer_traits<typename VoidAllocator::pointer>::template rebind_pointer<T>::type boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::pointer |
typedef ipcdetail::add_reference<value_type>::type boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::reference |
typedef void(this_type::* boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::unspecified_bool_type)() const |
typedef T boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::value_type |
|
inline |
Constructs an empty shared_ptr.
Use_count() == 0 && get()== 0.
|
inlineexplicit |
Constructs a shared_ptr that owns the pointer p.
Auxiliary data will be allocated with a copy of a and the object will be deleted with a copy of d. Requirements: Deleter and A's copy constructor must not throw.
References boost::BOOST_STATIC_ASSERT(), boost::interprocess::to_raw_pointer(), boost::detail::type, and boost::program_options::value().
|
inline |
Copy constructs a shared_ptr.
If r is empty, constructs an empty shared_ptr. Otherwise, constructs a shared_ptr that shares ownership with r. Never throws.
|
inline |
Constructs a shared_ptr that shares ownership with other and stores p.
Postconditions: get() == p && use_count() == r.use_count(). Throws: nothing.
|
inline |
If r is empty, constructs an empty shared_ptr.
Otherwise, constructs a shared_ptr that shares ownership with r. Never throws.
|
inlineexplicit |
Constructs a shared_ptr that shares ownership with r and stores a copy of the pointer stored in r.
|
inlineexplicit |
Move-Constructs a shared_ptr that takes ownership of other resource and other is put in default-constructed state.
Throws: nothing.
References boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::swap().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Returns the pointer pointing to the owned object.
Referenced by boost::interprocess::operator!=(), boost::interprocess::weak_ptr< element_type, A, D >::operator=(), boost::interprocess::operator==(), boost::interprocess::enable_shared_from_this< T, A, D >::shared_from_this(), boost::interprocess::to_raw_pointer(), and boost::interprocess::weak_ptr< element_type, A, D >::weak_ptr().
|
inline |
|
inline |
|
inline |
Not operator.
Returns true if this->get() != 0, false otherwise
|
inline |
Returns a reference to the pointed type.
References BOOST_ASSERT.
|
inline |
Returns the pointer pointing to the owned object.
References BOOST_ASSERT.
|
inline |
Equivalent to shared_ptr(r).swap(*this).
Never throws
|
inline |
Equivalent to shared_ptr(r).swap(*this).
Never throws
|
inline |
Move-assignment.
Equivalent to shared_ptr(other).swap(*this). Never throws
References boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::swap().
|
inline |
This is equivalent to: this_type().swap(*this);.
|
inline |
This is equivalent to: this_type(p, a, d).swap(*this);.
References boost::a, boost::BOOST_STATIC_ASSERT(), boost::detail::type, and boost::program_options::value().
|
inline |
|
inline |
Exchanges the contents of the two smart pointers.
Referenced by boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::operator=(), boost::interprocess::shared_ptr< T, VoidAllocator, Deleter >::shared_ptr(), and boost::interprocess::swap().
|
inline |
Returns use_count() == 1.
unique() might be faster than use_count()
|
inline |
|
inline |
Returns the number of shared_ptr objects, *this included, that share ownership with *this, or an unspecified nonnegative value when *this is empty.
use_count() is not necessarily efficient. Use only for debugging and testing purposes, not for production code.
|
friend |
|
friend |