Smart pointer class similar to boost::intrusive_ptr
.
More...
#include "ptr.h"
Public Member Functions | |
Ptr () | |
Create an empty smart pointer. More... | |
Ptr (const Ptr &o) | |
Copy by referencing the same underlying object. More... | |
template<typename U > | |
Ptr (const Ptr< U > &o) | |
Copy, removing const qualifier. More... | |
Ptr (T *ptr) | |
Create a smart pointer which points to the object pointed to by the input raw pointer ptr. More... | |
Ptr (T *ptr, bool ref) | |
Create a smart pointer which points to the object pointed to by the input raw pointer ptr. More... | |
~Ptr () | |
Destructor. More... | |
operator bool () const | |
Test for non-NULL pointer. More... | |
T & | operator* () |
A dereference. More... | |
T & | operator* () const |
A const dereference. More... | |
T * | operator-> () |
An lvalue member access. More... | |
T * | operator-> () const |
An rvalue member access. More... | |
Ptr< T > & | operator= (const Ptr &o) |
Assignment operator by referencing the same underlying object. More... | |
Private Member Functions | |
void | Acquire () const |
Mark this as a a reference by incrementing the reference count. More... | |
Private Attributes | |
T * | m_ptr |
The pointer. More... | |
Friends | |
template<typename U > | |
U * | GetPointer (const Ptr< U > &p) |
Get a permanent pointer to the underlying object. More... | |
template<typename U > | |
U * | PeekPointer (const Ptr< U > &p) |
Get a temporary pointer to the underlying object. More... | |
class | Ptr< const T > |
Interoperate with const instances. More... | |
Smart pointer class similar to boost::intrusive_ptr
.
This smart-pointer class assumes that the underlying type provides a pair of Ref()
and Unref()
methods which are expected to increment and decrement the internal reference count of the object instance. You can add Ref()
and Unref()
to a class simply by inheriting from ns3::SimpleRefCount<> using the CRTP (class Foo : public SimpleRefCount<Foo>
)
This implementation allows you to manipulate the smart pointer as if it was a normal pointer: you can test if it is non-null, compare it to other pointers of the same type, etc.
It is possible to extract the raw pointer from this smart pointer with the GetPointer() and PeekPointer() methods.
If you want to store a new Object()
into a smart pointer, we recommend you to use the CreateObject<>() template function to create the Object and store it in a smart pointer to avoid memory leaks. These functions are really small convenience functions and their goal is just is save you a small bit of typing. If the Object does not inherit from Object (or ObjectBase) there is also a convenience wrapper Create<>()
T | [explicit] The type of the underlying object. |
Create a smart pointer which points to the object pointed to by the input raw pointer ptr.
This method creates its own reference to the pointed object. The caller is responsible for Unref()'ing its own reference, and the smart pointer will eventually do the same, so that object is deleted if no more references to it remain.
[in] | ptr | Raw pointer to manage |
Definition at line 647 of file ptr.h.
References ns3::Ptr< T >::Acquire().
Create a smart pointer which points to the object pointed to by the input raw pointer ptr.
[in] | ptr | Raw pointer to manage |
[in] | ref | if set to true, this method calls Ref, otherwise, it does not call Ref. |
Definition at line 654 of file ptr.h.
References ns3::Ptr< T >::Acquire().
Copy by referencing the same underlying object.
[in] | o | The other Ptr instance. |
Definition at line 664 of file ptr.h.
References ns3::Ptr< T >::Acquire(), ns3::Ptr< T >::m_ptr, and ns3::Ptr< T >::PeekPointer.
Copy, removing const
qualifier.
U | [deduced] The type underlying the Ptr being copied. |
[in] | o | The Ptr to copy. |
Definition at line 677 of file ptr.h.
References ns3::Ptr< T >::Acquire().
|
inlineprivate |
Mark this as a a reference by incrementing the reference count.
Definition at line 632 of file ptr.h.
Referenced by ns3::Ptr< T >::Ptr().
|
explicit |
Test for non-NULL pointer.
This enables simple pointer checks like
The same construct works in the NS_ASSERT... and NS_ABORT... macros.
0
, NULL
or nullptr
are not supported. All these cases will fail to compile: if (p)
or if (!p)
as indicated.true
if the underlying pointer is non-NULL. T & ns3::Ptr< T >::operator* |
A dereference.
Definition at line 735 of file ptr.h.
References NS_ASSERT_MSG.
T & ns3::Ptr< T >::operator* |
A const
dereference.
Definition at line 727 of file ptr.h.
References NS_ASSERT_MSG.
T * ns3::Ptr< T >::operator-> |
An lvalue member access.
Definition at line 711 of file ptr.h.
References NS_ASSERT_MSG.
T * ns3::Ptr< T >::operator-> |
An rvalue member access.
Definition at line 719 of file ptr.h.
References NS_ASSERT_MSG.
Assignment operator by referencing the same underlying object.
[in] | o | The other Ptr instance. |
Definition at line 694 of file ptr.h.
References ns3::Ptr< T >::m_ptr.
Get a permanent pointer to the underlying object.
The underlying refcount is incremented prior to returning to the caller so the caller is responsible for calling Unref himself.
U | [deduced] The actual type of the argument and return pointer. |
[in] | p | Smart pointer |
Get a temporary pointer to the underlying object.
The underlying refcount is not incremented prior to returning to the caller so the caller is not responsible for calling Unref himself.
U | [deduced] The actual type of the argument and return pointer. |
[in] | p | Smart pointer |
Definition at line 449 of file ptr.h.
Referenced by ns3::Ptr< T >::Ptr().
|
friend |
|
private |
The pointer.
Definition at line 80 of file ptr.h.
Referenced by ns3::Ptr< T >::Ptr(), and ns3::Ptr< T >::operator=().