QSharedPointer Class

template <typename T> class QSharedPointer

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

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つのポインタ・ラッパークラスを提供しています:QPointerQSharedDataPointer 。それぞれ使用例が大きく異なるため、これらは互いに互換性がありません。

QSharedPointerは、外部参照カウント(オブジェクトの外部に置かれた参照カウンタ)によって共有ポインタを保持します。その名前が示すように、ポインタ値は QSharedPointer とQWeakPointer のすべてのインスタンス間で共有されます。しかし、ポインタが指すオブジェクトの内容は共有されないと考えるべきです。そのため、QSharedPointerは、指されたオブジェクトをデタッチしたりコピーを作成したりする方法を提供しません。

QSharedDataPointer一方、QSharedPointerは共有データ(つまりQSharedData から派生したクラス)へのポインタを保持します。これは、QSharedData のベース・クラスにある内部参照カウントによって行われます。したがって、このクラスは、ガードされているデータへのアクセスのタイプに基づいてデタッチすることができます:それがnon-constアクセスであれば、操作を完了するためにアトミックにコピーを作成します。

QExplicitlySharedDataPointer QExplicitlySharedDataPointer::detach() が明示的に呼び出された場合のみデタッチすることを除けば、 の変形である(これが名前の由来である)。QSharedDataPointer

QScopedPointer は、単にヒープに割り当てられたオブジェクトへのポインタを保持し、デストラクタでそれを削除します。このクラスは、オブジェクトをヒープに割り当てて削除する必要があるが、それ以上は必要ない場合に便利です。 は軽量なので、追加の構造体や参照カウントを使用しません。QScopedPointer

最後に、QPointerQObject から派生したオブジェクトへのポインタを保持しますが、その機能は弱いものです。QWeakPointer も同じ機能を持ちますが、この機能への使用は非推奨です。

オプションのポインタ追跡

QSharedPointerの機能で、デバッグのためにコンパイル時に有効にすることができるのは、ポインタ追跡メカニズムです。有効にすると、QSharedPointerは追跡するすべてのポインタをグローバル・セットに登録します。これにより、2つのQSharedPointerオブジェクトに同じポインタを代入するようなミスを発見することができます。

この機能は、QSharedPointerヘッダーをインクルードする前にQT_SHAREDPOINTER_TRACK_POINTERS マクロを定義することで有効になります。

この機能を使わずにコンパイルしたコードでも、この機能を使うことは安全です。QSharedPointerは、ポインタ追跡なしでコンパイルされたコードからでも、ポインタが追跡対象から削除されることを保証します。

ただし、ポインタ追跡機能には多重継承や仮想継承に対する制限があることに注意してください(つまり、2つの異なるポインタアドレスが同じオブジェクトを参照できる場合)。この場合、ポインタが異なる型にキャストされ、その値が変更されると、QSharedPointer のポインタ追跡機構は、追跡対象のオブジェクトが同じであることを検出できない可能性があります。

QSharedDataPointerQWeakPointerQScopedPointerQEnableSharedFromThisも参照して ください。

メンバ関数ドキュメント

[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

このオブジェクトが参照するポインタの値を返します。

注意:この関数が返すポインタを削除したり、削除する可能性のある他の関数(QSharedPointerQWeakPointer オブジェクトの作成を含む)に渡したりしないでください。

template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() const

このポインタの型からX への動的キャストを行い、参照を共有するQSharedPointer を返します。この関数がアップキャストに使用される場合、QSharedPointerdynamic_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 を返す。この関数がアップキャストに使用される場合、QSharedPointerqobject_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 が成功するためには、型TX が1つの階層に属していなければならない。

X は,T が持つのと同じ cv修飾子(constvolatile )を持たなければならず,そうでないとコンパイルに失敗することに注意してください.constnessを取り除くにはqSharedPointerConstCast を使用する。

QSharedPointer::staticCast()、qSharedPointerDynamicCast()、qSharedPointerConstCast()も参照

template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)

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

other オブジェクトはまず強い参照に変換される。この変換が失敗した場合(指差すオブジェクトがすでに削除されているため)、この関数はNULLQSharedPointer を返します。

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

QWeakPointer::toStrongRef()、qSharedPointerDynamicCast()、qSharedPointerConstCast()も参照

template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)

X 型にキャストされた、src が保持するポインタへの共有ポインタを返します。const_cast が成功するためには、TX の型が1つの階層に属していなければならない。TX の間のconstvolatile の違いは無視される。

QSharedPointer::constCast()、qSharedPointerCast()、qSharedPointerDynamicCast()も参照のこと

template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)

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

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修飾子(constvolatile )を持たなければならず,そうでないとコンパイルに失敗することに注意してください.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修飾子(constvolatile )を持たなければならないことに注意してください.constnessを取り除くにはqSharedPointerConstCast を使います。

QWeakPointer::toStrongRef()、qSharedPointerCast()、qSharedPointerConstCast()も参照してください

template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &src)

qSharedPointerObjectCast 関数は、共有ポインタをキャストするための関数です。

srcqobject_cast ()を使用してX 型に変換し、適切な型の内部ポインタを取得することで、 が保持するポインタへの共有ポインタを返します。qobject_cast が失敗した場合、返されるオブジェクトはNULLになります。

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

QSharedPointer::objectCast()、qSharedPointerCast()、qSharedPointerConstCast()も参照

template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)

qSharedPointerObjectCast 関数は、共有ポインタをキャストするための関数です。

srcqobject_cast ()を使用してX 、適切な型の内部ポインタを取得することにより、 が保持するポインタへの共有ポインタを返します。qobject_cast が失敗した場合、返されるオブジェクトはNULLになります。

src オブジェクトは、まず強い参照に変換される。この変換に失敗した場合(指さすオブジェクトがすでに削除されているため)、この関数もNULLQSharedPointer を返します。

X は,T が持つのと同じ cv修飾子(constvolatile )を持たなければならないことに注意してください.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修飾子(constvolatile )を持たなければならず,そうでなければコンパイルに失敗することに注意してください.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修飾子(constvolatile )を持たなければならず,そうでないとコンパイルに失敗することに注意してください.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)

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

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

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

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

ポインタptr1ptr2 で参照されているポインタと同じでない場合は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)

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

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

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

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

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

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

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

QSharedPointer::isNull()も参照

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

ポインタptr1ptr2 で参照されているポインタと同じポインタである場合、true を返します。

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

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

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

QSharedPointer::isNull()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。