QWeakPointer Class
template <typename T> class QWeakPointerQWeakPointer クラスは、共有ポインタへの弱参照を保持します。詳細...
| ヘッダー: | #include <QWeakPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
注:このクラスのすべての関数は再入可能である。
パブリック関数
| QWeakPointer() | |
| QWeakPointer(const QSharedPointer<T> &other) | |
| QWeakPointer(const QWeakPointer<T> &other) | |
| ~QWeakPointer() | |
| void | clear() |
| bool | isNull() const |
| QSharedPointer<T> | lock() const |
(since 6.7) bool | owner_before(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_before(const QWeakPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QWeakPointer<X> &other) const |
(since 6.7) size_t | owner_hash() const |
| void | swap(QWeakPointer<T> &other) |
| QSharedPointer<T> | toStrongRef() const |
| operator bool() const | |
| bool | operator!() const |
| QWeakPointer<T> & | operator=(const QSharedPointer<T> &other) |
| QWeakPointer<T> & | operator=(const QWeakPointer<T> &other) |
関連する非メンバ
| QWeakPointer<X> | qWeakPointerCast(const QWeakPointer<T> &src) |
| bool | operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2) |
| bool | operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
| bool | operator!=(const QWeakPointer<T> &lhs, std::nullptr_t) |
| bool | operator!=(std::nullptr_t, const QWeakPointer<T> &rhs) |
| bool | operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2) |
| bool | operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
| bool | operator==(const QWeakPointer<T> &lhs, std::nullptr_t) |
| bool | operator==(std::nullptr_t, const QWeakPointer<T> &rhs) |
詳細な説明
QWeakPointer は、C++ におけるポインタへの自動的な弱参照であり、テンプレートパラメータT は、追跡対象のポインタの型を指定します。これを使用してポインタを直接参照することはできませんが、別のコンテキストでポインタが削除されたかどうかを確認するために使用することができます。
QWeakPointer オブジェクトは、QSharedPointer からの代入によってのみ作成できます。
QWeakPointerには、ミスを防ぐための自動型変換演算子が用意されていない点に注意が必要です。QWeakPointerはポインタを追跡しますが、指し示すオブジェクトが有効であり続けることを保証するものではないため、それ自体をポインタと見なすべきではありません。
したがって、QWeakPointerが追跡しているポインタにアクセスするには、まずそれをQSharedPointer に昇格させ、結果として得られるオブジェクトがnullかどうかを確認する必要があります。QSharedPointer は、オブジェクトが削除されていないことを保証するため、nullではないオブジェクトが得られた場合は、そのポインタを使用できます。例については、QWeakPointer::toStrongRef()を参照してください。
QSharedPointer およびQScopedPointerも参照してください 。
メンバ関数のドキュメント
QWeakPointer::QWeakPointer()
何も指さない QWeakPointer を作成します。
QWeakPointer::QWeakPointer(const QSharedPointer<T> &other)
other が指すポインタへの弱参照を保持する QWeakPointer を作成します。
T がこのクラスのテンプレートパラメータの派生型である場合、QWeakPointer は自動キャストを実行します。そうでない場合は、コンパイラエラーが発生します。
[noexcept] QWeakPointer::QWeakPointer(const QWeakPointer<T> &other)
other が指すポインタへの弱参照を保持する QWeakPointer を作成します。
T がこのクラスのテンプレートパラメータの派生型である場合、QWeakPointer は自動型変換を行います。そうでない場合は、コンパイラエラーが発生します。
QWeakPointer::~QWeakPointer()
このQWeakPointer オブジェクトを破棄します。このオブジェクトが参照するポインタは削除されません。
void QWeakPointer::clear()
このQWeakPointer オブジェクトをクリアし、そのオブジェクトがポインタに対して持っていた可能性のある参照を解除します。
bool QWeakPointer::isNull() const
このオブジェクトが `nullptr` を参照している場合、true を返します。
なお、弱参照の性質上、QWeakPointer が参照するポインタはいつでもnullptr になる可能性があるため、この関数から返される値は、呼び出しごとに false から true へと変化する可能性があります。
QSharedPointer<T> QWeakPointer::lock() const
toStrongRef() と同じです。
この関数は、std::weak_ptr との API 互換性を確保するために提供されています。
[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_before(const QSharedPointer<X> &other) const
[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_before(const QWeakPointer<X> &other) const
このスマートポインタが、実装定義による所有者ベースの順序において、other より前に位置する場合に限り、true を返します。この順序では、2つのスマートポインタが両方とも空であるか、あるいは同じオブジェクトを所有している場合(たとえその表見的な型やポインタが異なっていても)、それらは同等であるとみなされます。
これらの関数は Qt 6.7 で導入されました。
owner_equalも参照してください 。
[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_equal(const QSharedPointer<X> &other) const
[noexcept, since 6.7] template <typename X> bool QWeakPointer::owner_equal(const QWeakPointer<X> &other) const
このスマートポインタとother が所有権を共有している場合に限り、true を返します。
これらの関数は Qt 6.7 で導入されました。
owner_before およびowner_hashも参照してください 。
[noexcept, since 6.7] size_t QWeakPointer::owner_hash() const
このスマートポインタオブジェクトの所有者ベースのハッシュ値を返します。owner_equal に従って等しいとみなされるスマートポインタは、同一の所有者ベースのハッシュ値を持ちます。
これらの関数は Qt 6.7 で導入されました。
owner_equalも参照してください 。
[noexcept] void QWeakPointer::swap(QWeakPointer<T> &other)
この弱いポインタのインスタンスを、other と入れ替えます。この操作は非常に高速で、失敗することはありません。
QSharedPointer<T> QWeakPointer::toStrongRef() const
この弱参照を強参照に変換し、その参照を保持するQSharedPointer オブジェクトを返します。QSharedPointer への変換を行う際、この関数はオブジェクトがすでに削除されているかどうかを確認します。削除されていない場合、この関数は共有オブジェクトへの参照カウントを1増やし、それによってオブジェクトが削除されないようにします。
この関数は、共有オブジェクトへの有効な強参照を取得できない場合があるため、返されたオブジェクトに対してQSharedPointer::isNull()を呼び出し、変換が成功したかどうかを常に確認する必要があります。
たとえば、次のコードは、保持されていたQWeakPointer をストロング参照に昇格させ、成功した場合は、保持されていた整数の値を出力します。
QWeakPointer<int>weakref;
// ...
QSharedPointer<int>strong=weakref.toStrongRef();
if(strong)
qDebug() << "The value is:" << *strong;
else
qDebug() << "The value has already been deleted";「QSharedPointer::QSharedPointer()」も参照してください 。
QWeakPointer::operator bool() const
含まれるポインタがnullptr でない場合、true を返します。この関数は、if-constructs での使用に適しており、次のように使用します。
if (weakref) { /*...*/ }なお、弱い参照の性質上、QWeakPointer が参照するポインタはいつでもnullptr になる可能性があるため、この関数の戻り値は呼び出しごとにtrueからfalseに変化する可能性があります。
isNull()も参照してください 。
bool QWeakPointer::operator!() const
このオブジェクトが `nullptr` を参照している場合、`true ` を返します。この関数は、次のように `if-constructs` 内で使用するのに適しています。
if (!weakref) { /*...*/ }なお、弱参照の性質上、QWeakPointer が参照するポインタはいつでもnullptr になる可能性があるため、この関数から返される値は、呼び出しごとに false から true に変化する可能性があります。
isNull()も参照してください 。
QWeakPointer<T> &QWeakPointer::operator=(const QSharedPointer<T> &other)
このオブジェクトが `other` のポインタを共有するようにします。現在のポインタ参照は破棄されますが、削除はされません。
T がこのクラスのテンプレートパラメータの派生型である場合、QWeakPointer は自動キャストを実行します。そうでない場合は、コンパイラエラーが発生します。
[noexcept] QWeakPointer<T> &QWeakPointer::operator=(const QWeakPointer<T> &other)
このオブジェクトが `other` のポインタを共有するようにします。現在のポインタ参照は破棄されますが、削除されることはありません。
T がこのクラスのテンプレートパラメータの派生型である場合、QWeakPointer は自動キャストを実行します。そうでない場合、コンパイラエラーが発生します。
関連する非メンバ
template <typename X, typename T> QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
src が保持するポインタへの弱ポインタを、X 型にキャストして返します。static_cast が成功するためには、T とX の型が同一の階層に属している必要があります。
なお、X はT と同じ cv-修飾子(const およびvolatile )を持つ必要があります。そうでない場合、コードはコンパイルに失敗します。qSharedPointerConstCast を使用して const 修飾を解除してください。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
ptr1 とptr2 が異なるポインタを指している場合、true を返します。
ptr2 のテンプレートパラメータがptr1 のものと異なる場合、QSharedPointer は、比較対象のポインタが等しくなるよう、自動的なstatic_cast を実行しようとします。ptr2 のテンプレートパラメータがptr1 の基底型または派生型でない場合、コンパイルエラーが発生します。
template <typename T, typename X> bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 とptr2 が異なるポインタを指している場合、true を返します。
ptr2 のテンプレートパラメータがptr1 のものと異なる場合、QSharedPointer は、比較対象のポインタが等しくなるよう、自動的なstatic_cast を実行しようとします。ptr2 のテンプレートパラメータが、ptr1 の基底型または派生型でない場合、コンパイルエラーが発生します。
template <typename T> bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
lhs が有効な(つまり、nullではない)ポインタを指している場合、true を返します。
QWeakPointer::isNull()も参照してください 。
template <typename T> bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
rhs が有効な(つまり、nullではない)ポインタを指している場合、true を返します。
QWeakPointer::isNull()も参照してください 。
template <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
ptr1 とptr2 が同じポインタを指している場合、true を返します。
ptr2 のテンプレートパラメータがptr1 のものと異なる場合、QSharedPointer は、比較対象のポインタが等しいことを保証するために、自動的なstatic_cast を試みます。ptr2 のテンプレートパラメータがptr1 の基底型または派生型でない場合、コンパイルエラーが発生します。
template <typename T, typename X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 とptr2 が同じポインタを指している場合、true を返します。
ptr2 のテンプレートパラメータがptr1 のものと異なる場合、QSharedPointer は、比較対象のポインタが等しいことを保証するために、自動的なstatic_cast を実行しようとします。ptr2 のテンプレートパラメータがptr1 の基底型または派生型でない場合、コンパイラエラーが発生します。
template <typename T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
lhs がnullptr を指している場合、true を返します。
QWeakPointer::isNull()も参照してください 。
template <typename T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)
rhs がnullptr を指している場合、true を返します。
QWeakPointer::isNull()も参照してください 。
© 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.