QSharedPointer Class
template <typename T> class QSharedPointerQSharedPointer クラスは、共有ポインタへの強い参照を保持します。詳細...
Header: | #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は他にも2つのポインタ・ラッパークラスを提供しています:QPointer とQSharedDataPointer 。それぞれ使用例が大きく異なるため、これらは互いに互換性がありません。
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
型でない場合、返されるオブジェクトは null になります。
注: テンプレート型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-このQSharedPointer インスタンスにother を割り当てます。
[noexcept]
template <typename X> QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<X> &&other)
Move-other をこのQSharedPointer インスタンスに代入する。
この代入演算子は、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)
seed を計算の種として使用して、key のハッシュ値を返します。
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
other が保持するポインタへの共有ポインタを、X
型にキャストして返します。static_cast
が成功するためには、型T
とX
が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 が保持するポインタへの共有ポインタを返します。static_cast
が成功するためには、T
とX
の型が1つの階層に属していなければならない。
other オブジェクトはまず強い参照に変換される。この変換が失敗した場合(指差すオブジェクトがすでに削除されているため)、この関数はNULLQSharedPointer を返します。
X
は,T
が持つのと同じ cv修飾子(const
とvolatile
)を持たなければならないことに注意してください.constness を捨てるにはqSharedPointerConstCast を使います。
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)
src が保持するポインタへの共有ポインタを返します。X
型への動的キャストを使用して、適切な型の内部ポインタを取得します。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 関数は、共有ポインタをキャストするための関数です。
src 、qobject_cast ()を使用してX
型に変換し、適切な型の内部ポインタを取得することで、 が保持するポインタへの共有ポインタを返します。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)
qobject_cast() を使用してX
型に変換し、適切な型の内部ポインタを取得することで、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()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。