#include <HUSD_DataHandle.h>
template<class T>
class TfRefPtr< T >
Reference-counted smart pointer utility class
The TfRefPtr
class implements a reference counting on objects that inherit from TfRefBase
.
For more information, see either the Quick Start example or read the detailed discussion.
Definition at line 72 of file HUSD_DataHandle.h.
Convenience type accessor to underlying type T
for template code.
Definition at line 591 of file refPtr.h.
Initialize pointer to nullptr.
The default constructor leaves the pointer initialized to point to the NULL object. Attempts to use the ->
operator will cause an abort until the pointer is given a value.
Definition at line 603 of file refPtr.h.
Moves the pointer managed by p
to *this
.
After construction, *this
will point to the object p
had been pointing at and p
will be pointing at the NULL object. The reference count of the object being pointed at does not change.
Definition at line 613 of file refPtr.h.
Initializes *this
to point at p's
object.
Increments p's
object's reference count.
Definition at line 623 of file refPtr.h.
template<class T>
template<template< class > class X, class U >
Initializes *this
to point at gp's
object.
Increments gp's
object's reference count.
Definition at line 365 of file weakPtrFacade.h.
template<class T>
template<class U >
Initializes to point at *ptr
.
Increments *ptr's
reference count. Note that newly constructed objects start with a reference count of one. Therefore, you should NOT use this constructor (either implicitly or explicitly) from within a New()
function. Use TfCreateRefPtr()
instead.
Definition at line 683 of file refPtr.h.
Decrements reference count of object being pointed to.
If the reference count of the object (if any) that was just pointed at reaches zero, the object will typically be destroyed at this point.
Definition at line 769 of file refPtr.h.
template<class T>
template<class U >
Initializes to point at p's
object, and increments reference count.
This initialization is legal only if
is legal.
Definition at line 803 of file refPtr.h.
template<class T>
template<class U >
Moves the pointer managed by p
to *this
and leaves p
pointing at the NULL object. The reference count of the object being pointed to is not changed.
This initialization is legal only if
is legal.
Definition at line 826 of file refPtr.h.
True if the pointer points to an object.
Definition at line 990 of file refPtr.h.
True if the pointer points to NULL
.
Definition at line 995 of file refPtr.h.
template<class T>
template<class U >
Returns true if *this
and p
do not point to the same object.
The comparison is legal only if a T*
and a U*
are comparable.
Definition at line 964 of file refPtr.h.
Dereferences the stored pointer.
Definition at line 981 of file refPtr.h.
Accessor to T's
public members.
Definition at line 972 of file refPtr.h.
template<class T>
template<class U >
Returns true if the address of the object pointed to by *this
compares less than the address of the object pointed to by p
.
The comparison is legal only if a T*
and a U*
are comparable.
Definition at line 921 of file refPtr.h.
template<class T>
template<class U >
Assigns pointer to point at p's
object, and increments reference count.
The object (if any) pointed at before the assignment has its reference count decremented, while the object newly pointed at has its reference count incremented. If the object previously pointed to now has nobody left to point at it, the object will typically be destroyed at this point.
An assignment
can be used to make ptr
"forget" where it is pointing; note however that this has an important side effect, since it decrements the reference count of the object previously pointed to by ptr
, possibly triggering destruction of that object.
Definition at line 722 of file refPtr.h.
Moves the pointer managed by p
to *this
and leaves p
pointing at the NULL object.
The object (if any) pointed at before the assignment has its reference count decremented, while the reference count of the object newly pointed at is not changed.
Definition at line 750 of file refPtr.h.
template<class T>
template<class U >
Assigns pointer to point at p's
object, and increments reference count.
This assignment is legal only if
is legal.
Definition at line 851 of file refPtr.h.
template<class T>
template<class U >
Moves the pointer managed by p
to *this
and leaves p
pointing at the NULL object. The reference count of the object being pointed to is not changed.
This assignment is legal only if
is legal.
Definition at line 881 of file refPtr.h.
template<class T>
template<class U >
Returns true if *this
and p
point to the same object (or if they both point to NULL).
The comparison is legal only if a T*
and a U*
are comparable.
Definition at line 907 of file refPtr.h.
template<class T>
template<class U >
template<class T>
template<class U >
Set this pointer to point to no object. Equivalent to assignment with TfNullPtr.
Definition at line 1013 of file refPtr.h.
Swap this pointer with other. After this operation, this pointer will point to what other formerly pointed to, and other will point to what this pointer formerly pointed to.
Definition at line 1003 of file refPtr.h.
template<class T>
template<class U >
template<class T>
template<class D >
Allows const casting of a TfRefPtr
.
The following is always legal:
As with the C++ const_cast
operator, use of this function is discouraged.
template<class T>
template<class U >
Transfer a raw pointer to a reference-counted pointer.
The TfCreateRefPtr()
function should only be used from within a static New()
function (or similarly, a Clone()
function) of a reference-counted class. Reference-counted objects have their reference count initially set to one to account for the fact that a newly created object must always persist at least until its New()
function returns. Therefore, the transfer of the pointer returned by new
into a reference pointer must not increase the reference count. The transfer of the raw pointer returned by new
into the object returned by New()
is a "transfer of ownership" and does not represent an additional reference to the object.
In summary, this code is wrong, and will return an object that can never be destroyed:
SimpleRefPtr Simple::New() {
return SimpleRefPtr(new Simple);
}
The correct form is
SimpleRefPtr Simple::New() {
}
Note also that a function which is essentially like New()
, for example Clone()
, would also want to use TfCreateRefPtr()
.
template<class T>
template<class U >
template<class T>
template<class D , class B >
Allows dynamic casting of a TfRefPtr
.
If it is legal to dynamically cast a T*
to a D*
, then the following is also legal:
The runtime performance of this function is exactly the same as a dynamic_cast
(i.e. one virtual function call). If the pointer being cast is NULL or does not point to an object of the requisite type, the result is a TfRefPtr
pointing to NULL.
template<class T>
template<class HashState , class U >
template<class T>
template<class U >
template<class T>
template<class D , class B >
template<class T>
template<class D , class B >
Allows static casting of a TfRefPtr
.
If it is legal to statically cast a T*
to a D*
, then the following is also legal:
The runtime performance of this function is exactly the same as a regular TfRefPtr
initialization, since the cost of the underlying static_cast
is zero. Of course, a TfDynamic_cast
is preferred, assuming the underlying types are polymorphic (i.e. have virtual functions).
template<class T>
template<class U >
Call typeid
on the object pointed to by a TfRefPtr
.
If ptr
is a TfRefPtr
, typeid(ptr)
will return type information about the TfRefPtr
. To access type information about the object pointed to by a TfRefPtr
, one can use TfTypeid
.
template<class T>
template<class U >
The documentation for this class was generated from the following files: