QEnableSharedFromThis Class
template <typename T> class QEnableSharedFromThis共有ポインタによってすでに管理されているオブジェクトのQSharedPointer を取得できるようにする基底クラス。詳細...
| ヘッダー: | #include <QEnableSharedFromThis> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
パブリック関数
| QSharedPointer<T> | sharedFromThis() |
| QSharedPointer<const T> | sharedFromThis() const |
詳細な説明
クラスの任意のインスタンス(例えば、そのオブジェクト内部から)からQSharedPointer を作成する必要がある場合に、このクラスを継承することができます。 テンプレートパラメータ `T ` は、`QEnableSharedFromThis` から継承するクラスの型を指定します。重要な点は、単に `QSharedPointer<T>(this)` を返すという手法は使用できないということです。これは、その結果、参照カウントが別々の複数の異なる `QSharedPointer ` オブジェクトが作成されてしまうためです。このため、同じ生ポインタから `QSharedPointer ` を 2 つ以上作成してはなりません。
QEnableSharedFromThis は、const 属性の有無に応じてQSharedPointer<T> およびQSharedPointer<const T> をthis に返す、sharedFromThis() という 2 つのメンバ関数を定義しています:
class Y: public QEnableSharedFromThis<Y>
{
public:
QSharedPointer<Y> f()
{
return sharedFromThis();
}
};
int main()
{
QSharedPointer<Y> p(new Y());
QSharedPointer<Y> y = p->f();
Q_ASSERT(p == y); // p and q must share ownership
}また、クラス自体の外部にあるオブジェクトから共有ポインタを取得することも可能です。これは、現在共有ポインタを使用できないスクリプトへのインターフェースを提供するコードにおいて特に有用です。例えば:
class ScriptInterface : public QObject
{
Q_OBJECT
// ...
public slots:
void slotCalledByScript(Y *managedBySharedPointer)
{
QSharedPointer<Y> yPtr = managedBySharedPointer->sharedFromThis();
// Some other code unrelated to scripts that expects a QSharedPointer<Y> ...
}
};メンバ関数のドキュメント
QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()
this (つまり、このメソッドを呼び出しているサブクラスのインスタンス)がQSharedPointer によって管理されている場合は、this を指す共有ポインタのインスタンスを返します。そうでない場合は、nullのQSharedPointer を返します。
QSharedPointer<const T> QEnableSharedFromThis::sharedFromThis() const
sharedFromThis() の定数オーバーロード。
これはオーバーロードされた関数です。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.