KSharedPtr

#include <KSharedPtr>

Public Member Functions

 KSharedPtr ()
 
 KSharedPtr (T *p)
 
 KSharedPtr (const KSharedPtr &o)
 
 ~KSharedPtr ()
 
void attach (T *p)
 
void clear ()
 
const T * constData () const
 
int count () const
 
T * data ()
 
const T * data () const
 
bool isNull () const
 
bool isUnique () const
 
 operator bool () const
 
bool operator!= (const KSharedPtr &o) const
 
bool operator!= (const T *p) const
 
const T & operator* () const
 
T & operator* ()
 
const T * operator-> () const
 
T * operator-> ()
 
bool operator< (const KSharedPtr &o) const
 
KSharedPtr< T > & operator= (const KSharedPtr &o)
 
KSharedPtr< T > & operator= (T *p)
 
bool operator== (const KSharedPtr &o) const
 
bool operator== (const T *p) const
 

Static Public Member Functions

template<class U >
static KSharedPtr< T > dynamicCast (const KSharedPtr< U > &o)
 
template<class U >
static KSharedPtr< T > staticCast (const KSharedPtr< U > &o)
 

Protected Attributes

T * d
 

Detailed Description

template<class T>
class KSharedPtr< T >

Can be used to control the lifetime of an object that has derived QSharedData.

As long a someone holds a KSharedPtr on some QSharedData object it won't become deleted but is deleted once its reference count is 0. This struct emulates C++ pointers virtually perfectly. So just use it like a simple C++ pointer.

The difference with QSharedPointer is that QSharedPointer does the refcounting in the pointer, while KSharedPtr does the refcounting in the object. This allows to convert to a raw pointer temporarily and back to a KSharedPtr without deleting the object, if another reference exists. But it imposes a requirement on the object, which must inherit QSharedData.

The difference with using QSharedDataPointer is that QSharedDataPointer is a building block for implementing a value class with implicit sharing (like QString), whereas KSharedPtr provides refcounting to code that uses pointers.

Author
Waldo Bastian basti[email protected][email protected][email protected]de.or[email protected]g
Deprecated:
use QExplicitlySharedDataPointer instead

Definition at line 66 of file ksharedptr.h.

Constructor & Destructor Documentation

template<class T>
KSharedPtr< T >::KSharedPtr ( )
inline

Creates a null pointer.

Definition at line 72 of file ksharedptr.h.

template<class T>
KSharedPtr< T >::KSharedPtr ( T *  p)
inlineexplicit

Creates a new pointer.

Parameters
pthe pointer

Definition at line 79 of file ksharedptr.h.

template<class T>
KSharedPtr< T >::KSharedPtr ( const KSharedPtr< T > &  o)
inline

Copies a pointer.

Parameters
othe pointer to copy

Definition at line 91 of file ksharedptr.h.

template<class T>
KSharedPtr< T >::~KSharedPtr ( )
inline

Unreferences the object that this pointer points to.

If it was the last reference, the object will be deleted.

Definition at line 103 of file ksharedptr.h.

Member Function Documentation

template<class T >
Q_INLINE_TEMPLATE void KSharedPtr< T >::attach ( T *  p)

Attach the given pointer to the current KSharedPtr.

If the previous shared pointer is not owned by any KSharedPtr, it is deleted.

Definition at line 291 of file ksharedptr.h.

template<class T >
Q_INLINE_TEMPLATE void KSharedPtr< T >::clear ( )

Clear the pointer, i.e.

make it a null pointer.

Definition at line 305 of file ksharedptr.h.

template<class T>
const T* KSharedPtr< T >::constData ( ) const
inline
Returns
a const pointer to the shared object.

Definition at line 171 of file ksharedptr.h.

template<class T>
int KSharedPtr< T >::count ( ) const
inline

Returns the number of references.

Returns
the number of references

Definition at line 213 of file ksharedptr.h.

template<class T>
T* KSharedPtr< T >::data ( )
inline
Returns
the pointer

Definition at line 155 of file ksharedptr.h.

template<class T>
const T* KSharedPtr< T >::data ( ) const
inline
Returns
the pointer

Definition at line 163 of file ksharedptr.h.

template<class T>
template<class U >
static KSharedPtr<T> KSharedPtr< T >::dynamicCast ( const KSharedPtr< U > &  o)
inlinestatic

Convert KSharedPtr<U> to KSharedPtr<T>, using a dynamic_cast.

This will compile whenever T* and U* are compatible, i.e. T is a subclass of U or vice-versa. Example syntax: KSharedPtr<T> tPtr; KSharedPtr<U> uPtr = KSharedPtr<U>::dynamicCast( tPtr ); Since a dynamic_cast is used, if U derives from T, and tPtr isn't an instance of U, uPtr will be 0.

Definition at line 269 of file ksharedptr.h.

template<class T>
bool KSharedPtr< T >::isNull ( ) const
inline

Test if the shared pointer is null.

Returns
true if the pointer is null, false otherwise.
See also
opertor (bool)

Definition at line 225 of file ksharedptr.h.

template<class T>
bool KSharedPtr< T >::isUnique ( ) const
inline
Returns
Whether this is the only shared pointer pointing to to the pointee, or whether it's shared among multiple shared pointers.

Definition at line 235 of file ksharedptr.h.

template<class T>
KSharedPtr< T >::operator bool ( ) const
inline

Test if the shared pointer is NOT null.

Returns
true if the shared pointer is NOT null, false otherwise.
See also
isNull

Definition at line 147 of file ksharedptr.h.

template<class T>
template<class U >
static KSharedPtr<T> KSharedPtr< T >::staticCast ( const KSharedPtr< U > &  o)
inlinestatic

Convert KSharedPtr<U> to KSharedPtr<T>, using a static_cast.

This will compile whenever T* and U* are compatible, i.e. T is a subclass of U or vice-versa. Example syntax: KSharedPtr<T> tPtr; KSharedPtr<U> uPtr = KSharedPtr<U>::staticCast( tPtr );

Definition at line 253 of file ksharedptr.h.


The documentation for this class was generated from the following file:
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Wed Aug 5 2020 22:56:36 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.