Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
QEnableSharedFromThis< T > Class Template Reference

\inmodule QtCore More...

#include <qsharedpointer_impl.h>

+ Collaboration diagram for QEnableSharedFromThis< T >:

Public Member Functions

QSharedPointer< T > sharedFromThis ()
 
QSharedPointer< const T > sharedFromThis () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 

Protected Member Functions

 QEnableSharedFromThis ()=default
 
 QEnableSharedFromThis (const QEnableSharedFromThis &)
 
QEnableSharedFromThisoperator= (const QEnableSharedFromThis &)
 

Friends

template<class X >
class QSharedPointer
 

Detailed Description

template<class T>
class QEnableSharedFromThis< T >

\inmodule QtCore

A base class that allows obtaining a QSharedPointer for an object already managed by a shared pointer.

Since
5.4

You can inherit this class when you need to create a QSharedPointer from any instance of a class; for instance, from within the object itself. The key point is that the technique of just returning QSharedPointer<T>(this) cannot be used, because this winds up creating multiple distinct QSharedPointer objects with separate reference counts. For this reason you must never create more than one QSharedPointer from the same raw pointer.

QEnableSharedFromThis defines two member functions called sharedFromThis() that return a QSharedPointer<T> and QSharedPointer<const T>, depending on constness, to this:

class Y: public QEnableSharedFromThis<Y>
{
public:
{
return sharedFromThis();
}
};
int main()
{
Q_ASSERT(p == y); // p and q must share ownership
}
\inmodule QtCore
int main()
[0]
GLfloat GLfloat f
GLint y
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47

It is also possible to get a shared pointer from an object outside of the class itself. This is especially useful in code that provides an interface to scripts, where it is currently not possible to use shared pointers. For example:

class ScriptInterface : public QObject
{
// ...
public slots:
void slotCalledByScript(Y *managedBySharedPointer)
{
QSharedPointer<Y> yPtr = managedBySharedPointer->sharedFromThis();
// Some other code unrelated to scripts that expects a QSharedPointer<Y> ...
}
};
QSharedPointer< T > sharedFromThis()
\inmodule QtCore
Definition qobject.h:90
#define Q_OBJECT
#define slots

Definition at line 723 of file qsharedpointer_impl.h.

Constructor & Destructor Documentation

◆ QEnableSharedFromThis() [1/2]

template<class T >
QEnableSharedFromThis< T >::QEnableSharedFromThis ( )
protecteddefault

◆ QEnableSharedFromThis() [2/2]

template<class T >
QEnableSharedFromThis< T >::QEnableSharedFromThis ( const QEnableSharedFromThis< T > &  )
inlineprotected

Definition at line 727 of file qsharedpointer_impl.h.

Member Function Documentation

◆ operator=()

template<class T >
QEnableSharedFromThis & QEnableSharedFromThis< T >::operator= ( const QEnableSharedFromThis< T > &  )
inlineprotected

Definition at line 728 of file qsharedpointer_impl.h.

◆ sharedFromThis() [1/2]

template<class T >
template< class T > QSharedPointer< T > QEnableSharedFromThis< T >::sharedFromThis ( )
inline
Since
5.4

If this (that is, the subclass instance invoking this method) is being managed by a QSharedPointer, returns a shared pointer instance pointing to this; otherwise returns a null QSharedPointer.

Definition at line 731 of file qsharedpointer_impl.h.

Referenced by ScriptInterface::slotCalledByScript().

+ Here is the caller graph for this function:

◆ sharedFromThis() [2/2]

template<class T >
template< class T > QSharedPointer< const T > QEnableSharedFromThis< T >::sharedFromThis ( ) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Since
5.4

Const overload of sharedFromThis().

Definition at line 732 of file qsharedpointer_impl.h.

Friends And Related Symbol Documentation

◆ QSharedPointer

template<class T >
template<class X >
friend class QSharedPointer
friend

Definition at line 735 of file qsharedpointer_impl.h.


The documentation for this class was generated from the following files: