QSharedPointer Class
template <typename T> class QSharedPointerQSharedPointer クラスは、共有ポインタへの強い参照を保持します。詳細...
ヘッダ | #include <QSharedPointer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
QSharedPointer() | |
QSharedPointer(QSharedPointer<X> &&other) | |
QSharedPointer(X *ptr) | |
QSharedPointer(const QWeakPointer<T> &other) | |
QSharedPointer(std::nullptr_t) | |
QSharedPointer(X *ptr, Deleter d) | |
QSharedPointer(std::nullptr_t, Deleter d) | |
QSharedPointer(const QSharedPointer<T> &other) | |
QSharedPointer(QSharedPointer<T> &&other) | |
~QSharedPointer() | |
void | clear() |
QSharedPointer<X> | constCast() const |
T * | data() const |
QSharedPointer<X> | dynamicCast() const |
T * | get() const |
bool | isNull() const |
QSharedPointer<X> | objectCast() 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 | reset() |
void | reset(T *t) |
void | reset(T *t, Deleter deleter) |
QSharedPointer<X> | staticCast() const |
void | swap(QSharedPointer<T> &other) |
QWeakPointer<T> | toWeakRef() const |
bool | operator bool() const |
bool | operator!() const |
T & | operator*() const |
T * | operator->() const |
QSharedPointer<T> & | operator=(QSharedPointer<T> &&other) |
QSharedPointer<T> & | operator=(QSharedPointer<X> &&other) |
QSharedPointer<T> & | operator=(const QSharedPointer<T> &other) |
QSharedPointer<T> & | operator=(const QWeakPointer<T> &other) |
静的パブリックメンバ
QSharedPointer<T> | create(Args &&... args) |
関連する非メンバー
size_t | qHash(const QSharedPointer<T> &key, size_t seed = 0) |
QSharedPointer<X> | qSharedPointerCast(const QSharedPointer<T> &other) |
QSharedPointer<X> | qSharedPointerCast(const QWeakPointer<T> &other) |
QSharedPointer<X> | qSharedPointerConstCast(const QSharedPointer<T> &src) |
QSharedPointer<X> | qSharedPointerConstCast(const QWeakPointer<T> &src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QSharedPointer<T> &src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QWeakPointer<T> &src) |
QSharedPointer<X> | qSharedPointerObjectCast(const QSharedPointer<T> &src) |
QSharedPointer<X> | qSharedPointerObjectCast(const QWeakPointer<T> &src) |
std::shared_ptr<X> | qSharedPointerObjectCast(const std::shared_ptr<T> &src) |
std::shared_ptr<X> | qSharedPointerObjectCast(std::shared_ptr<T> &&src) |
std::shared_ptr<X> | qobject_pointer_cast(const std::shared_ptr<T> &src) |
std::shared_ptr<X> | qobject_pointer_cast(std::shared_ptr<T> &&src) |
bool | operator!=(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator!=(const QSharedPointer<T> &ptr1, const X *ptr2) |
bool | operator!=(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator!=(const T *ptr1, const QSharedPointer<X> &ptr2) |
bool | operator!=(std::nullptr_t, const QSharedPointer<T> &rhs) |
QDebug | operator<<(QDebug debug, const QSharedPointer<T> &ptr) |
bool | operator==(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(const QSharedPointer<T> &ptr1, const X *ptr2) |
bool | operator==(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator==(const T *ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(std::nullptr_t, const QSharedPointer<T> &rhs) |
詳細説明
QSharedPointer は、C++ における自動共有ポインタです。通常のポインタとまったく同じように動作します。
QSharedPointer は、他の QSharedPointer オブジェクトがそのポインタを参照していない限り、スコープ外に出ると保持しているポインタを削除します。
QSharedPointer オブジェクトは、通常のポインタ、別の QSharedPointer オブジェクト、またはQWeakPointer オブジェクトを強い参照に昇格することで作成できます。
スレッド安全性
QSharedPointer とQWeakPointer はリエントラント・クラスです。これは、一般的に、与えられたQSharedPointerまたはQWeakPointer オブジェクトは、同期化なしでは複数のスレッドから同時にアクセスできないことを意味します。
異なるQSharedPointerやQWeakPointer オブジェクトは、複数のスレッドから同時に安全にアクセスできます。これには、同じオブジェクトへのポインタを保持する場合も含まれます。参照カウント機構はアトミックであり、手動での同期は必要ありません。
ポインタ値はこの方法でアクセスできますが(つまり、同期化なしで複数のスレッドから同時にアクセスできます)、QSharedPointerとQWeakPointer は、ポイントされているオブジェクトに関する保証を提供しないことに注意する必要があります。そのオブジェクトに固有のスレッド安全性と再入可能性のルールが依然として適用されます。
その他のポインタクラス
Qt では、QPointer とQSharedDataPointer という2つのポインタ・ラッパ・クラスも提供しています。それぞれ使用例が大きく異なるため、これらは互いに互換性がありません。
QSharedPointerは、外部参照カウント(オブジェクトの外部に置かれた参照カウンタ)によって共有ポインタを保持します。その名前が示すように、ポインタ値は QSharedPointer とQWeakPointer のすべてのインスタンス間で共有されます。しかし、ポインタが指すオブジェクトの内容は共有されないと考えるべきです。そのため、QSharedPointerは、指されたオブジェクトを切り離したり、コピーを作成したりする方法を提供しません。
QSharedDataPointer一方、QSharedPointerは共有データ(つまりQSharedData から派生したクラス)へのポインタを保持します。これは、QSharedData のベース・クラスにある内部参照カウントによって行われます。したがって、このクラスは、ガードされているデータへのアクセスのタイプに基づいてデタッチすることができます:それがnon-constアクセスであれば、操作を完了するためにアトミックにコピーを作成します。
QExplicitlySharedDataPointer QExplicitlySharedDataPointer::detach() が明示的に呼び出された場合のみデタッチすることを除けば、 の変形である(これが名前の由来である)。QSharedDataPointer
QScopedPointer は、単にヒープに割り当てられたオブジェクトへのポインタを保持し、デストラクタでそれを削除します。このクラスは、オブジェクトをヒープに割り当てて削除する必要があるが、それ以上は必要ない場合に便利です。 は軽量なので、追加の構造体や参照カウントを使用しません。QScopedPointer
最後に、QPointer はQObject から派生したオブジェクトへのポインタを保持しますが、その機能は弱いものです。QWeakPointer も同じ機能を持ちますが、この機能への使用は非推奨です。
オプションのポインタ追跡
QSharedPointerの機能で、デバッグのためにコンパイル時に有効にすることができるのは、ポインタ追跡メカニズムです。有効にすると、QSharedPointerは追跡するすべてのポインタをグローバル・セットに登録します。これにより、2つのQSharedPointerオブジェクトに同じポインタを代入するようなミスを発見することができます。
この機能は、QSharedPointerヘッダーをインクルードする前にQT_SHAREDPOINTER_TRACK_POINTERS
マクロを定義することで有効になります。
この機能を使わずにコンパイルしたコードでも、この機能を使うことは安全です。QSharedPointerは、ポインタ追跡なしでコンパイルされたコードからでも、ポインタが追跡対象から削除されることを保証します。
ただし、ポインタ追跡機能には多重継承や仮想継承に対する制限があることに注意してください(つまり、2つの異なるポインタアドレスが同じオブジェクトを参照できる場合)。この場合、ポインタが異なる型にキャストされ、その値が変更されると、QSharedPointerのポインタ追跡機構は、追跡されるオブジェクトが同じであることを検出できない可能性があります。
QSharedDataPointer,QWeakPointer,QScopedPointer,QEnableSharedFromThisも参照してください 。
メンバ関数ドキュメント
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_before(const QSharedPointer<X> &other) const
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_before(const QWeakPointer<X> &other) const
このスマートポインタが、実装で定義された所有者ベースの順序でother より前にある場合に限り、true
を返します。この順序付けは、2つのスマートポインタが両方とも空であるか、または(見かけの型とポインタが異なっていても)両方とも同じオブジェクトを所有している場合に等価であるとみなされます。
この関数は Qt 6.7 で導入されました。
owner_equalも参照して ください。
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_equal(const QSharedPointer<X> &other) const
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_equal(const QWeakPointer<X> &other) const
このスマートポインタとother が所有権を共有している場合に限り、true
を返します。
この関数は Qt 6.7 で導入されました。
owner_before およびowner_hashも参照してください 。
[noexcept, since 6.7]
size_t QSharedPointer::owner_hash() const
このスマートポインタオブジェクトのオーナーベースのハッシュ値を返します。(owner_equal
)等しいスマートポインタを比較すると、同じオーナーベースのハッシュを持つことになります。
この関数は Qt 6.7 で導入されました。
owner_equalも参照してください 。
QSharedPointer::QSharedPointer()
NULL の QSharedPointer を作成します(オブジェクトはnullptr
への参照を保持しています)。
[noexcept]
template <typename X> QSharedPointer::QSharedPointer(QSharedPointer<X> &&other)
Move-QSharedPointerインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにする。
このコンストラクタは、X*
が暗黙的にT*
に変換される場合にのみ、オーバーロードの解決に参加します。
[explicit]
template <typename X> QSharedPointer::QSharedPointer(X *ptr)
ptr を指す QSharedPointer を作成します。ポインタptr は、この QSharedPointer によって管理されるようになり、他の QSharedPointer オブジェクトに渡されたり、このオブジェクトの外部で削除されたりしてはなりません。
Qt 5.8 以降では、この QSharedPointer への最後の参照が破棄されると、X
のデストラクタを呼び出すことでptr が削除されます(X
が QSharedPointer のテンプレート・パラメータT
と同じでなくても)。以前は、T
のデストラクタが呼び出されていました。
QSharedPointer::QSharedPointer(const QWeakPointer<T> &other)
弱い参照other を強い参照に昇格させ、そのポインタを共有することによって、QSharedPointer を作成します。
T
がこのクラスのテンプレート・パラメーターの派生型である場合、QSharedPointer は自動キャストを行います。そうでない場合は、コンパイラ・エラーが発生します。
QWeakPointer::toStrongRef()も参照してください 。
QSharedPointer::QSharedPointer(std::nullptr_t)
NULL の QSharedPointer を作成します。これは QSharedPointer のデフォルトコンストラクタと同等です。
template <typename X, typename Deleter> QSharedPointer::QSharedPointer(X *ptr, Deleter d)
ptr を指す QSharedPointer を作成します。ポインタptr は、この QSharedPointer によって管理されるようになり、他の QSharedPointer オブジェクトに渡されたり、このオブジェクトの外部で削除されたりしてはなりません。
deleter パラメータd は、このオブジェクトのカスタム deleter を指定します。強い参照カウントが 0 になると、delete() 演算子の代わりにカスタム deleter が呼び出されます。これは、例えばQObject のdeleteLater() を呼び出すときなどに便利です:
static void doDeleteLater(MyObject *obj) { obj->deleteLater(); } void otherFunction() { QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject, doDeleteLater); // continue using obj obj.clear(); // calls obj->deleteLater(); }
QSharedPointer テンプレート・パラメータT
が同じでなくても、カスタム・デレ ータ関数はX
型へのポインタで呼び出されることに注意してください。
のように、メンバ関数を直接指定することも可能です:
QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);
clear()も参照してください 。
template <typename Deleter> QSharedPointer::QSharedPointer(std::nullptr_t, Deleter d)
NULL の QSharedPointer を作成します。これは、QSharedPointer のデフォルト・コンストラクタと同じです。
deleter パラメータd は、このオブジェクトのカスタム deleter を指定します。強力な参照カウントが 0 になると、演算子 delete() の代わりにカスタム deleter が呼び出されます。
QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)
other のポインタを共有する QSharedPointer オブジェクトを作成します。
T
がこのクラスのテンプレート・パラメータの派生型である場合、QSharedPointer は自動キャストを行います。そうでない場合は、コンパイラ・エラーが発生します。
[noexcept]
QSharedPointer::QSharedPointer(QSharedPointer<T> &&other)
Move-QSharedPointerインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにする。
QSharedPointer::~QSharedPointer()
このQSharedPointer オブジェクトを破棄する。保存されているポインタへの最後の参照である場合、ポインタも削除されます。
void QSharedPointer::clear()
このQSharedPointer オブジェクトをクリアし、ポインタへの参照を削除します。これが最後の参照であった場合、ポインタ自体も削除されます。
template <typename X> QSharedPointer<X> QSharedPointer::constCast() const
このポインターの型からX
へのconst_cast
を実行し、参照を共有するQSharedPointer を返す。この関数はアップキャストにもダウンキャストにも使えますが、アップキャストの方が便利です。
isNull() およびqSharedPointerConstCast()も参照 。
[static]
template <typename... Args> QSharedPointer<T> QSharedPointer::create(Args &&... args)
これはオーバーロードされた関数である。
QSharedPointer オブジェクトを作成し、T
型の新しいアイテムを割り当てる。QSharedPointer の内部とオブジェクトは、1 回のメモリ割り当てで割り当てられるため、長時間実行するアプリケーションでメモリの断片化を減らすことができます。
この関数は、渡されたすべての引数(args)を受け入れることができる、T
型のコンストラクタを呼び出そうとします。引数は完全にフォワードされる。
T *QSharedPointer::data() const
このオブジェクトが参照するポインタの値を返します。
注意:この関数が返すポインタを削除したり、削除する可能性のある他の関数(QSharedPointer やQWeakPointer オブジェクトの作成を含む)に渡したりしないでください。
template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() const
このポインタの型からX
への動的キャストを行い、参照を共有するQSharedPointer を返す。この関数がアップキャストに使用された場合、QSharedPointer はdynamic_cast
を実行します。つまり、このQSharedPointer が指すオブジェクトがX
型でない場合、返されるオブジェクトは null になります。
注: テンプレート型X
は、このオブジェクトのテンプレートと同じ const および volatile 修飾子を持っていなければなりません。これらの修飾子を削除する必要がある場合は、constCast() を使用してください。
qSharedPointerDynamicCast()も参照 。
T *QSharedPointer::get() const
data() と同じ。
この関数は、std::shared_ptr
とのAPI互換性のために提供されている。
bool QSharedPointer::isNull() const
このオブジェクトがnullptr
を参照している場合はtrue
を返す。
template <typename X> QSharedPointer<X> QSharedPointer::objectCast() const
このポインタの型からX
へのqobject_cast() を実行し、参照を共有するQSharedPointer を返す。この関数がアップキャストに使用される場合、QSharedPointer はqobject_cast
を実行します。つまり、このQSharedPointer が指すオブジェクトがX
型でない場合、返されるオブジェクトはヌルになります。
注: テンプレート型X
は、このオブジェクトのテンプレートと同じ const および volatile 修飾子を持っていなければなりません。これらの修飾子を削除する必要がある場合は、constCast() を使用してください。
qSharedPointerObjectCast()も参照 。
void QSharedPointer::reset()
clear() と同じ。std::shared_ptr互換のため。
void QSharedPointer::reset(T *t)
このQSharedPointer オブジェクトをリセットし、代わりにt を指すようにする。と同等:
QSharedPointer<T> other(t); this->swap(other);
template <typename Deleter> void QSharedPointer::reset(T *t, Deleter deleter)
deleterこのQSharedPointer オブジェクトをリセットし、代わりにt を指すようにします。と同等:
QSharedPointer<T> other(t, deleter); this->swap(other);
template <typename X> QSharedPointer<X> QSharedPointer::staticCast() const
このポインタの型からX
への静的キャストを行い、参照を共有するQSharedPointer を返します。この関数はアップキャストにもダウンキャストにも使えますが、アップキャストの方が便利です。
注意:テンプレート型X
は、このオブジェクトのテンプレートと同じ const および volatile 修飾子を持っていなければなりません。これらの修飾子を削除する必要がある場合は、constCast() を使用してください。
dynamicCast()、constCast()、qSharedPointerCast()も参照 。
[noexcept]
void QSharedPointer::swap(QSharedPointer<T> &other)
この共有ポインタ・インスタンスをother と交換する。この操作は非常に高速で、失敗することはない。
QWeakPointer<T> QSharedPointer::toWeakRef() const
このオブジェクトが参照するポインタを共有する弱い参照オブジェクトを返します。
QWeakPointer::QWeakPointer()も参照してください 。
bool QSharedPointer::operator bool() const
含まれるポインタがnullptr
でない場合はtrue
を返す。この関数はif-constructs
のような用途に適している:
if (sharedptr) { ... }
isNull()も参照 。
bool QSharedPointer::operator!() const
このオブジェクトがnullptr
を参照している場合、true
を返す。 この関数はif-constructs
のように使用するのに適している:
if (!sharedptr) { ... }
isNull()も参照 。
T &QSharedPointer::operator*() const
共有ポインタのメンバへのアクセスを提供する。
含まれるポインタがnullptr
の場合、動作は未定義です。
isNull()も参照 。
T *QSharedPointer::operator->() const
共有ポインタのメンバへのアクセスを提供する。
含まれるポインタがnullptr
の場合、動作は未定義です。
isNull()も参照 。
[noexcept]
QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<T> &&other)
Move-other をこのQSharedPointer インスタンスに割り当てる。
[noexcept]
template <typename X> QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<X> &&other)
Move-このQSharedPointer インスタンスにother を代入する。
この代入演算子は、X*
が暗黙的にT*
に変換される場合にのみ、オーバーロード解決に参加する。
QSharedPointer<T> &QSharedPointer::operator=(const QSharedPointer<T> &other)
このオブジェクトにother のポインタを共有させる。現在のポインタ参照は破棄され、それが最後のものであれば、ポインタは削除される。
T
がこのクラスのテンプレート・パラメーターの派生型である場合、QSharedPointer は自動キャストを行います。そうでない場合は、コンパイラー・エラーが発生します。
QSharedPointer<T> &QSharedPointer::operator=(const QWeakPointer<T> &other)
other を強い参照に昇格させ、このオブジェクトが参照するポインタへの参照を共有させる。現在のポインタ参照は破棄され、それが最後のものであれば、ポインタは削除される。
T
がこのクラスのテンプレート・パラメーターの派生型である場合、QSharedPointer は自動キャストを行います。そうでない場合は、コンパイラー・エラーが発生します。
関連する非会員
[noexcept]
template <typename T> size_t qHash(const QSharedPointer<T> &key, size_t seed = 0)
key のハッシュ値を返す。計算のシードにはseed を使用する。
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
X
型にキャストされた、other が保持するポインタへの共有ポインタを返す。型T
とX
は、static_cast
が成功するためには、1つの階層に属していなければならない。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.constnessを取り除くにはqSharedPointerConstCast を使用する。
QSharedPointer::staticCast()、qSharedPointerDynamicCast()、qSharedPointerConstCast()も参照のこと 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
X
型にキャストされた、other が保持するポインタへの共有ポインタを返す。型T
とX
は、static_cast
が成功するためには1つの階層に属していなければならない。
other オブジェクトはまず強い参照に変換されます。この変換が失敗した場合(指さすオブジェクトがすでに削除されているため)、この関数はNULLQSharedPointer を返します。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.qSharedPointerConstCast を使って,constness を捨ててください.
QWeakPointer::toStrongRef()、qSharedPointerDynamicCast()、qSharedPointerConstCast()も参照 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
X
型にキャストされた、src が保持するポインタへの共有ポインタを返す。const_cast
が成功するためには、型T
とX
が1つの階層に属していなければならない。T
とX
の間のconst
とvolatile
の違いは無視される。
QSharedPointer::constCast()、qSharedPointerCast()、qSharedPointerDynamicCast()も参照のこと 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
X
型にキャストされた、src が保持するポインタへの共有ポインタを返す。const_cast
が成功するためには、型T
とX
が1つの階層に属していなければならない。T
とX
の間のconst
とvolatile
の違いは無視される。
src オブジェクトは、まず強い参照に変換される。この変換が失敗した場合(オブジェクトがすでに削除されているため)、この関数は nullQSharedPointer を返す。
QWeakPointer::toStrongRef()、qSharedPointerCast()、qSharedPointerDynamicCast()も参照のこと 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
適切な型の内部ポインタを得るために、X
型への動的キャストを使用して、src が保持するポインタへの共有ポインタを返します。dynamic_cast
が失敗した場合,返されるオブジェクトは NULL になります.
X
は,T
が持つのと同じcv修飾子(const
とvolatile
)を持たなければならず,そうでないとコンパイルに失敗することに注意してください.qSharedPointerConstCast を使って、constness を捨ててください。
QSharedPointer::dynamicCast()、qSharedPointerCast()、qSharedPointerConstCast()も参照 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
適切な型の内部ポインタを得るために、X
型への動的キャストを使用して、src が保持するポインタへの共有ポインタを返します。dynamic_cast
が失敗した場合、返されるオブジェクトはNULLとなる。
src オブジェクトはまず強い参照に変換される。この変換に失敗した場合(指さすオブジェクトがすでに削除されているため)、この関数もNULLQSharedPointer を返します。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.constnessを取り除くにはqSharedPointerConstCast を使います。
QWeakPointer::toStrongRef()、qSharedPointerCast()、qSharedPointerConstCast()も参照 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &src)
qSharedPointerObjectCast 関数は、共有ポインタをキャストするための関数です。
qobject_cast() を使ってX
型に変換し、適切な型の内部ポインタを取得することで、src が保持するポインタへの共有ポインタを返します。qobject_cast
が失敗した場合、返されるオブジェクトはNULLになります。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.qSharedPointerConstCast を使って、constness を捨ててください。
QSharedPointer::objectCast()、qSharedPointerCast()、qSharedPointerConstCast()も参照 。
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
qSharedPointerObjectCast 関数は、共有ポインタをキャストするための関数です。
src 、qobject_cast ()を使用してX
、適切な型の内部ポインタを取得することにより、 が保持するポインタへの共有ポインタを返します。qobject_cast
が失敗した場合、返されるオブジェクトはNULLになります。
src オブジェクトは、まず強い参照に変換される。この変換に失敗した場合(指差すオブジェクトがすでに削除されているため)、この関数もNULLQSharedPointer を返します。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.constnessを取り除くにはqSharedPointerConstCast を使います。
QWeakPointer::toStrongRef()、qSharedPointerCast()、qSharedPointerConstCast()も参照 。
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(const std::shared_ptr<T> &src)
X
型へのqobject_cast() を使用して、適切な型の内部ポインタを取得し、src が保持するポインタへの共有ポインタを返す。qobject_cast
が失敗した場合,返されるオブジェクトは NULL になります.
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならず,そうでないとコンパイルに失敗することに注意してください.const_pointer_castを使って、constnessをキャストしてください。
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(std::shared_ptr<T> &&src)
src が保持するポインタへの共有ポインタを返す。X
型へのqobject_cast() を使用して、適切な型の内部ポインタを取得する。
qobject_cast
が成功すると、関数は有効な共有ポインタを返し、src は null にリセットされる。qobject_cast
が失敗すると、返されるオブジェクトはNULLとなり、src は変更されない。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならず,そうでないとコンパイルに失敗することに注意してください.const_pointer_castを使用して、constnessをキャストしてください。
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(const std::shared_ptr<T> &src)
src が保持するポインタへの共有ポインタを返す。
qSharedPointerObjectCast() と同じ。この関数は STL との互換性のために提供されています。
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(std::shared_ptr<T> &&src)
qSharedPointerObjectCast() と同じ。この関数は STL との互換性のために提供されています。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 とptr2 が異なるポインタを参照している場合、true
を返す。
ptr2 のテンプレート・パラメータがptr1 のものと異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast
を実行しようとします。ptr2'のテンプレート・パラメータがptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生します。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const X *ptr2)
ptr1 とptr2 が異なるポインタを参照している場合、true
を返す。
ptr2 の型がptr1 の型と異なる場合、QSharedPointer は自動的 にstatic_cast
を実行し、比較するポインタが等しいことを確認しようとする。ptr2'の型がこのptr1'の基底型または派生型でない場合、コンパイラー・エラーが発生する。
template <typename T> bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
lhs が有効な(すなわち NULL ではない)ポインタを指している場合はtrue
を返す。
QSharedPointer::isNull()も参照のこと 。
template <typename T, typename X> bool operator!=(const T *ptr1, const QSharedPointer<X> &ptr2)
ポインタptr1 がptr2 によって参照されるポインタと同じポインタでない場合、true
を返す。
ptr2 のテンプレート・パラメータがptr1 の型と異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast
を実行しようとします。ptr2 のテンプレート・パラメータがptr1 の型の基底型または派生型でない場合、コンパイラ・エラーが発生します。
template <typename T> bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs が有効な(すなわち NULL ではない)ポインタを指している場合はtrue
を返す。
QSharedPointer::isNull()も参照のこと 。
template <typename T> QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
デバッグのために、ptr によって追跡されたポインタをデバッグ・オブジェクトdebug に書き込む。
デバッグ技法も参照のこと 。
template <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 とptr2 が同じポインタを参照している場合、true
を返す。
ptr2 のテンプレート・パラメータがptr1 のものと異なる場合、QSharedPointer は、比較されるポインタが等しいことを確認するために、自動的にstatic_cast
を実行しようとします。ptr2'のテンプレート・パラメータがptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生します。
template <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const X *ptr2)
ptr1 とptr2 が同じポインタを参照している場合、true
を返す。
ptr2 の型がptr1 の型と異なる場合、QSharedPointer は、比較するポインタが等しいことを確認するために、自動的にstatic_cast
を実行しようとする。ptr2'の型がこのptr1'の基底型または派生型でない場合、コンパイラ・エラーが発生する。
template <typename T> bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
lhs がnullptr
を参照している場合はtrue
を返す。
QSharedPointer::isNull()も参照のこと 。
template <typename T, typename X> bool operator==(const T *ptr1, const QSharedPointer<X> &ptr2)
ポインタptr1 がptr2 によって参照されるポインタと同じポインタである場合、true
を返す。
ptr2 のテンプレート・パラメータがptr1 の型と異なる場合、QSharedPointer は自動的 にstatic_cast
を実行し、比較されるポインタが等しいことを確認しようとします。ptr2 のテンプレート・パラメータがptr1 の型の基底または派生型でない場合、コンパイラ・エラーが発生します。
template <typename T> bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs がnullptr
を参照している場合はtrue
を返す。
QSharedPointer::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.