QWeakPointer Class
template <typename T> class QWeakPointerQWeakPointer クラスは、共有ポインタへの弱い参照を保持します。詳細...
Header: | #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つのスマートポインタが両方とも空であるか、同じオブジェクトを所有している場合(見かけの型やポインタが異なっていても)、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
になる可能性があることに注意。したがって、この関数から返される値は、呼び出しのたびに false から true に変わる可能性がある。
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; else 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
が成功するためには、型T
とX
が1つの階層に属していなければならない。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.qSharedPointerConstCast 。
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()も参照して ください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。