Open CASCADE Technology
7.4.0
|
Intrusive smart pointer for use with Standard_Transient class and its descendants. More...
#include <Standard_Transient.hxx>
Public Types | |
typedef T | element_type |
STL-compliant typedef of contained type. More... | |
Public Member Functions | |
handle () | |
Empty constructor. More... | |
handle (const T *thePtr) | |
Constructor from pointer to new object. More... | |
handle (const handle &theHandle) | |
Copy constructor. More... | |
handle (handle &&theHandle) | |
Move constructor. More... | |
~handle () | |
Destructor. More... | |
void | Nullify () |
Nullify the handle. More... | |
bool | IsNull () const |
Check for being null. More... | |
void | reset (T *thePtr) |
Reset by new pointer. More... | |
handle & | operator= (const handle &theHandle) |
Assignment operator. More... | |
handle & | operator= (const T *thePtr) |
Assignment to pointer. More... | |
handle & | operator= (handle &&theHandle) |
Move operator. More... | |
T * | get () const |
STL-like cast to pointer to referred object (note non-const). More... | |
T * | operator-> () const |
Member access operator (note non-const) More... | |
T & | operator* () const |
Dereferencing operator (note non-const) More... | |
template<class T2 > | |
bool | operator== (const handle< T2 > &theHandle) const |
Check for equality. More... | |
template<class T2 > | |
bool | operator== (const T2 *thePtr) const |
Check for equality. More... | |
template<class T2 > | |
bool | operator!= (const handle< T2 > &theHandle) const |
Check for inequality. More... | |
template<class T2 > | |
bool | operator!= (const T2 *thePtr) const |
Check for inequality. More... | |
template<class T2 > | |
bool | operator< (const handle< T2 > &theHandle) const |
Compare operator for possible use in std::map<> etc. More... | |
operator Standard_Transient *handle::* () const | |
Conversion to bool-compatible type for use in conditional expressions. More... | |
template<class T2 > | |
operator const handle< T2 > & () const | |
Upcast to const reference to base type. NB: this implementation will cause ambiguity errors on calls to overloaded functions accepting handles to different types, since compatibility is checked in the cast code rather than ensured by SFINAE (possible with C++11) More... | |
template<class T2 > | |
operator handle< T2 > & () | |
Upcast to non-const reference to base type. NB: this cast can be dangerous, but required for legacy code; see #26377. More... | |
Static Public Member Functions | |
template<class T2 > | |
static opencascade::std::enable_if< is_base_but_not_same< T2, T >::value, handle >::type | DownCast (const handle< T2 > &theObject) |
Down casting operator from handle to base type. More... | |
template<class T2 > | |
static opencascade::std::enable_if< is_base_but_not_same< T2, T >::value, handle >::type | DownCast (const T2 *thePtr) |
Down casting operator from pointer to base type. More... | |
template<class T2 > | |
static handle | DownCast (const handle< T2 > &theObject, typename opencascade::std::enable_if<!is_base_but_not_same< T2, T >::value, void *>::type=0) |
For compatibility, define down casting operator from non-base type, as deprecated. More... | |
template<class T2 > | |
static handle | DownCast (const T2 *thePtr, typename opencascade::std::enable_if<!is_base_but_not_same< T2, T >::value, void *>::type=0) |
For compatibility, define down casting operator from non-base type, as deprecated. More... | |
Friends | |
template<class T2 > | |
bool | operator== (const T2 *left, const handle &right) |
Check for equality. More... | |
template<class T2 > | |
bool | operator!= (const T2 *left, const handle &right) |
Check for inequality. More... | |
Intrusive smart pointer for use with Standard_Transient class and its descendants.
This class is similar to boost::intrusive_ptr<>. The reference counter is part of the base class (Standard_Transient), thus creation of a handle does not require allocation of additional memory for the counter. All handles to the same object share the common counter; object is deleted when the last handle pointing on it is destroyed. It is safe to create a new handle from plain C pointer to the object already pointed by another handle. The same object can be referenced by handles of different types (as soon as they are compatible with the object type).
Handle has type cast operator to const reference to handle to the base types, which allows it to be passed by reference in functions accepting reference to handle to base class, without copying.
By default, the type cast operator is provided also for non-const reference. These casts (potentially unsafe) can be disabled by defining macro OCCT_HANDLE_NOCAST; if it is defined, generalized copy constructor and assignment operators are defined allowing to initialize handle of base type from handle to derived type.
Weak pointers are not supported.
typedef T opencascade::handle< T >::element_type |
STL-compliant typedef of contained type.
|
inline |
Empty constructor.
|
inline |
Constructor from pointer to new object.
|
inline |
Copy constructor.
|
inline |
Move constructor.
|
inline |
Destructor.
|
inlinestatic |
Down casting operator from handle to base type.
|
inlinestatic |
Down casting operator from pointer to base type.
|
inlinestatic |
For compatibility, define down casting operator from non-base type, as deprecated.
|
inlinestatic |
For compatibility, define down casting operator from non-base type, as deprecated.
|
inline |
STL-like cast to pointer to referred object (note non-const).
|
inline |
Check for being null.
|
inline |
Nullify the handle.
|
inline |
Upcast to const reference to base type. NB: this implementation will cause ambiguity errors on calls to overloaded functions accepting handles to different types, since compatibility is checked in the cast code rather than ensured by SFINAE (possible with C++11)
Upcast to non-const reference to base type. NB: this cast can be dangerous, but required for legacy code; see #26377.
|
inline |
Conversion to bool-compatible type for use in conditional expressions.
|
inline |
Check for inequality.
|
inline |
Check for inequality.
|
inline |
Dereferencing operator (note non-const)
|
inline |
Member access operator (note non-const)
|
inline |
Compare operator for possible use in std::map<> etc.
|
inline |
Assignment operator.
|
inline |
Assignment to pointer.
|
inline |
Move operator.
|
inline |
Check for equality.
|
inline |
Check for equality.
|
inline |
Reset by new pointer.
|
friend |
Check for inequality.
|
friend |
Check for equality.