QWeakPointer Class

template <typename T> class QWeakPointer

QWeakPointer クラスは、共有ポインタへの弱い参照を保持します。詳細...

ヘッダ #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
bool 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++ におけるポインタへの自動的な弱い参照です。ポインタを直接参照解除することはできませんが、別のコンテキストでポインタが削除されたかどうかを確認するために使用できます。

QWeakPointer オブジェクトは、QSharedPointer からの代入によってのみ作成できます。

重要なのは、QWeakPointer は間違いを防ぐための自動キャスト演算子を提供していないことです。QWeakPointerがポインタを追跡するとしても、ポインタそのものをポインタと見なすべきではない。

したがって、QWeakPointer が追跡しているポインタにアクセスするには、まずそれをQSharedPointer に昇格させ、その結果得られるオブジェクトが NULL かどうかを検証する必要があります。QSharedPointer はオブジェクトが削除されないことを保証しているので、NULL でないオブジェクトを取得した場合は、そのポインタを使用できます。例についてはQWeakPointer::toStrongRef() を参照のこと。

QSharedPointer およびQScopedPointerも参照のこと

メンバ関数ドキュメント

[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も参照してください

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 になる可能性があるため、この関数から返される値は、呼び出しのたびに偽から真に変わる可能性があることに注意してください。

QSharedPointer<T> QWeakPointer::lock() const

toStrongRef() と同じ。

この関数は、std::weak_ptrとのAPI互換性のために提供される。

[noexcept] void QWeakPointer::swap(QWeakPointer<T> &other)

この弱いポインターのインスタンスをother と交換する。この操作は非常に高速で、失敗することはない。

QSharedPointer<T> QWeakPointer::toStrongRef() const

この弱い参照を強い参照に昇格させ、その参照を保持するQSharedPointer オブジェクトを返す。QSharedPointer に昇格させる際、この関数はオブジェクトがすでに削除されているかどうかを確認します。削除されていない場合、この関数は共有オブジェクトへの参照カウントを増やし、削除されないようにします。

この関数は、共有オブジェクトへの有効な強い参照の取得に失敗する可能性があるため、返されたオブジェ クトに対してQSharedPointer::isNull() を呼び出して、変換が成功したかどうかを常に検証する必要があります。

例えば、以下のコードでは、保持されていたQWeakPointer を強参照に昇格させ、成功した場合は保持されていた整数の値を表示します:

    QWeakPointer<int>weakref;// ...  QSharedPointer<int>strong=weakref.toStrongRef();if(strong)        qDebug() << "The value is:" << *strong;
   その他        qDebug() << "The value has already been deleted";

QSharedPointer::QSharedPointer()も参照のこと

bool QWeakPointer::operator bool() const

含まれるポインタがnullptr でない場合はtrue を返す。この関数は、if-constructs のように使用するのに適している:

    if (weakref) { ... }

弱参照の性質上、QWeakPointer が参照するポインタはいつでもnullptr になる可能性があるため、この関数から返される値は、呼び出すたびに真から偽に変わる可能性があることに注意してください。

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)

X 型にキャストされた、src が保持するポインタへの弱いポインタを返す。static_cast が成功するためには、TX が1つの階層に属していなければならない。

X は,T が持つのと同じ cv修飾子(constvolatile )を持たなければならないことに注意してください.qSharedPointerConstCast

template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)

ptr1ptr2 が異なるポインタを参照している場合、true を返す。

ptr2 のテンプレート・パラメータがptr1 のものと異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast を実行しようとします。ptr2'のテンプレート・パラメータがptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生します。

template <typename T, typename X> bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

ptr1ptr2 が異なるポインタを参照している場合、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)

ptr1ptr2 が同じポインタを参照している場合、true を返す。

ptr2 のテンプレート・パラメータがptr1 のものと異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast を実行しようとします。ptr2'のテンプレート・パラメータがptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生します。

template <typename T, typename X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

ptr1ptr2 が同じポインタを参照している場合、true を返す。

ptr2 のテンプレート・パラメータがptr1 のものと異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast を実行しようとします。ptr2'のテンプレート・パラメータがptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生します。

template <typename T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)

lhsnullptr を参照している場合はtrue を返す。

QWeakPointer::isNull()も参照のこと

template <typename T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

rhsnullptr を参照している場合はtrue を返す。

QWeakPointer::isNull()も参照のこと

© 2025 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.