このページでは

QSharedPointer Class

template <typename T> class QSharedPointer

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

ヘッダー: #include <QSharedPointer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注:このクラスのすべての関数は再入可能である。

QSharedPointer の比較

カテゴリ比較可能な型説明
strongQSharedPointer
strongQSharedPointer<X>、X*、および std::nullptr_t。ここで、X と T は互換性のある型、つまり、それらが同じ型であるか、あるいは一方が他方の基底型であるかを意味します。

パブリック関数

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 &
(since 6.9) QSharedPointer<X> constCast() &&
T *data() const
QSharedPointer<X> dynamicCast() const &
(since 6.9) QSharedPointer<X> dynamicCast() &&
T *get() const
bool isNull() const
QSharedPointer<X> objectCast() const &
(since 6.9) QSharedPointer<X> objectCast() &&
(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 &
(since 6.9) QSharedPointer<X> staticCast() &&
void swap(QSharedPointer<T> &other)
QWeakPointer<T> toWeakRef() const
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)
(since 6.9) QSharedPointer<X> qSharedPointerCast(QSharedPointer<T> &&other)
QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
(since 6.9) QSharedPointer<X> qSharedPointerConstCast(QSharedPointer<T> &&src)
QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
(since 6.9) QSharedPointer<X> qSharedPointerDynamicCast(QSharedPointer<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)
(since 6.9) QSharedPointer<X> qSharedPointerObjectCast(QSharedPointer<T> &&src)
(since 6.12) QSharedPointer<X> qSharedPointerStaticCast(const QSharedPointer<T> &other)
(since 6.12) QSharedPointer<X> qSharedPointerStaticCast(const QWeakPointer<T> &other)
(since 6.12) QSharedPointer<X> qSharedPointerStaticCast(QSharedPointer<T> &&other)
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> &lhs, const QSharedPointer<X> &rhs)
bool operator!=(const QSharedPointer<T> &lhs, const X *rhs)
bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
bool operator!=(const T *lhs, const QSharedPointer<X> &rhs)
bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
bool operator==(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs)
bool operator==(const QSharedPointer<T> &lhs, const X *rhs)
bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
bool operator==(const T *lhs, const QSharedPointer<X> &rhs)
bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)

詳細な説明

QSharedPointer は、C++ の自動共有ポインタであり、テンプレートパラメータ `T ` によって、管理されるポインタの型が指定されます。const の扱いを含め、通常の用途においては、通常のポインタとまったく同じように動作します。

QSharedPointerは、スコープ外に出た際に、他のQSharedPointerオブジェクトがそれを参照していない限り、保持しているポインタを削除します。

QSharedPointer オブジェクトは、通常のポインタ、別の QSharedPointer オブジェクト、あるいはQWeakPointer オブジェクトを強い参照に昇格させることによって作成できます。

スレッドセーフ性

QSharedPointer およびQWeakPointer は再入可能なクラスです。つまり、一般的に、特定の QSharedPointer またはQWeakPointer オブジェクトには、同期処理を行わない限り、複数のスレッドから同時にアクセスすることはできません。

異なる QSharedPointer およびQWeakPointer オブジェクトについては、複数のスレッドが同時に安全にアクセスできます。これには、それらが同じオブジェクトへのポインタを保持している場合も含まれます。参照カウントのメカニズムはアトミックであるため、手動による同期は不要です。

なお、ポインタの値はこのように(つまり、同期処理なしに複数のスレッドから同時に)アクセス可能ですが、QSharedPointerおよびQWeakPointer は、そのポインタが指すオブジェクトについて何の保証も提供しません。そのオブジェクトに対する具体的なスレッドセーフおよび再入可能性のルールは、依然として適用されます。

その他のポインタクラス

Qt には、他にも 2 つのポインタ・ラッパー・クラス、QPointer とQSharedDataPointer が用意されています。これらはそれぞれ用途が大きく異なるため、互いに互換性がありません。

QSharedPointerは、外部参照カウント(つまり、オブジェクトの外側に配置された参照カウンタ)を用いて共有ポインタを保持します。 その名前が示すように、ポインタの値は QSharedPointer とQWeakPointer のすべてのインスタンス間で共有されます。ただし、そのポインタが指すオブジェクトの内容は共有されているとは見なすべきではありません。オブジェクトは1つしか存在しないからです。そのため、QSharedPointer には、指されているオブジェクトを切り離したり、コピーを作成したりする方法は用意されていません。

QSharedDataPointer一方、QSharedData は共有データ(すなわち、 から派生したクラス)へのポインタを保持します。 これは、基底クラスであるQSharedData に配置された内部の参照カウントによって実現されています。したがって、このクラスは、保護されているデータに対するアクセスの種類に基づいて切り離しを行うことができます。非constアクセスである場合、操作を完了させるためにアトミックにコピーを作成します。

QExplicitlySharedDataPointer はQSharedDataPointer のバリエーションですが、QExplicitlySharedDataPointer::detach()が明示的に呼び出された場合にのみデタッチを行う点が異なります(そのためこの名前が付けられています)。

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

最後に、QPointer はQObject 派生オブジェクトへのポインタを保持しますが、それは弱参照として扱われます。QWeakPointer も同様の機能を持っていますが、その機能への使用は非推奨となっています。

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

デバッグ目的でコンパイル時に有効にできる QSharedPointer の機能として、ポインタ追跡メカニズムがあります。これを有効にすると、QSharedPointer は追跡対象のすべてのポインタをグローバルセットに登録します。これにより、2 つの QSharedPointer オブジェクトに同じポインタを割り当てるといったミスを検出できるようになります。

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

この機能は、ポインタ追跡機能なしでコンパイルされたコードと併用しても安全です。QSharedPointerは、ポインタ追跡機能なしでコンパイルされたコードからであっても、そのポインタがトラッカーから確実に削除されるようにします。

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

QSharedDataPointer 、QWeakPointer 、QScopedPointer 、およびQEnableSharedFromThisも参照してください 。

メンバ関数のドキュメント

QSharedPointer::QSharedPointer()

null である QSharedPointer を作成します(オブジェクトは `nullptr` への参照を保持しています)。

[noexcept] template <typename X> QSharedPointer::QSharedPointer(QSharedPointer<X> &&other)

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 は、このオブジェクトのカスタムデリータを指定します。強い参照カウントが 0 になったとき、演算子 delete() の代わりにこのカスタムデリータが呼び出されます。これは、例えば、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 ` は、このオブジェクトのカスタムデリータを指定します。強参照カウントが 0 になったとき、`operator delete()` の代わりにこのカスタムデリータが呼び出されます。

QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)

other のポインタを共有する QSharedPointer オブジェクトを作成します。

T がこのクラスのテンプレートパラメータの派生型である場合、QSharedPointer は自動キャストを実行します。そうでない場合は、コンパイルエラーが発生します。

[noexcept] QSharedPointer::QSharedPointer(QSharedPointer<T> &&other)

QSharedPointer のインスタンスをムーブコンストラクタで生成し、other が指していたのと同じオブジェクトを指すようにします。

QSharedPointer::~QSharedPointer()

この `QSharedPointer ` オブジェクトを破棄します。これが保存されているポインタへの最後の参照である場合、この操作によってポインタ自体も削除されます。

void QSharedPointer::clear()

このQSharedPointer オブジェクトをクリアし、そのオブジェクトがポインタに対して持っていた可能性のある参照を解除します。これが最後の参照であった場合、ポインタ自体が削除されます。

template <typename X> QSharedPointer<X> QSharedPointer::constCast() const &

このポインタの型からX へのconst_cast を実行し、その参照を共有するQSharedPointer を返します。この関数はアップキャストとダウンキャストの両方に使用できますが、アップキャストの場合に特に有用です。

isNull() およびqSharedPointerConstCast()も参照してください 。

[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::constCast() &&

返されるQSharedPointer は、*this と同じ共有所有者のグループと所有権を共有します。

この関数resets は、成功した場合に*this をnullptr にオーバーロードします。

この関数は、QSharedPointer::constCast() をオーバーロードします。

この関数は Qt 6.9 で導入されました。

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()。

[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() &&

返されるQSharedPointer は、*this と同じ共有所有者グループと所有権を共有します。

この関数resets は、成功した場合に*this をnullptr に上書きします。

この関数は、QSharedPointer::dynamicCast() をオーバーロードします。

この関数は Qt 6.9 で導入されました。

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()。

[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::objectCast() &&

返されるQSharedPointer は、*this と同じ共有所有者のグループと所有権を共有します。

この関数 `resets ` は、成功した場合に `*this ` を `nullptr ` に上書きします。

この関数は、QSharedPointer::objectCast() をオーバーロードしています。

この関数は Qt 6.9 で導入されました。

qSharedPointerObjectCast()も参照してください 。

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

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)

この `QSharedPointer ` オブジェクトを、`t ` を指すように再設定し、`Deleter` として `deleter` を指定します。これは、以下の記述と同等です:

QSharedPointer<T> other(t, deleter); this->swap(other);

template <typename X> QSharedPointer<X> QSharedPointer::staticCast() const &

このポインタの型からX への静的キャストを行い、その参照を共有するQSharedPointer を返します。この関数はアップキャストとダウンキャストの両方に使用できますが、アップキャストの場合に特に有用です。

注:テンプレート型 `X ` は、このオブジェクトのテンプレートと同じ `const` および `volatile` 修飾子を持つ必要があります。そうでない場合、キャストは失敗します。これらの修飾子を削除する必要がある場合は、`constCast()` を使用してください。

関連項目: dynamicCast()、constCast()、およびqSharedPointerStaticCast()。

[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::staticCast() &&

返されるQSharedPointer は、*this と同じ共有所有者のグループと所有権を共有します。

この関数resets は、成功した場合に*this をnullptr に置き換えます。

この関数は、QSharedPointer::staticCast() をオーバーロードします。

この関数は Qt 6.9 で導入されました。

dynamicCast()、constCast()、およびqSharedPointerStaticCast()も参照してください 。

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

この共有ポインタのインスタンスを、other と入れ替えます。この操作は非常に高速で、失敗することはありません。

QWeakPointer<T> QSharedPointer::toWeakRef() const

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

QWeakPointer::QWeakPointer()も参照してください 。

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)

other をこのQSharedPointer インスタンスに割り当てます。

[noexcept] template <typename X> QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<X> &&other)

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)

`key` のハッシュ値を、計算のシードとして `seed ` を使用して返します。

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

other が保持するポインタへの共有ポインタを、型X にキャストして返します。static_cast が成功するためには、型T とX が同一の階層に属している必要があります。

なお、X はT と同じ cv-修飾子(const およびvolatile )を持つ必要があり、そうでない場合、コードはコンパイルに失敗します。qSharedPointerConstCast を使用して const 修飾を解除してください。

QSharedPointer::staticCast()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

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

other が保持するポインタへの共有ポインタを、X 型にキャストして返します。static_cast が成功するためには、T 型とX 型が同一の階層に属している必要があります。

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

なお、X はT と同じcv修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードのコンパイルに失敗します。const性を解除するには、qSharedPointerConstCast を使用してください。

QWeakPointer::toStrongRef()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(QSharedPointer<T> &&other)

返されるQSharedPointer は、other と同じ共有所有者のグループと所有権を共有しています。

この関数は、成功した場合に `resets ` を `other ` から `nullptr ` へ変換します。

この関数は、QSharedPointer::qSharedPointerCast(const QSharedPointer<T> &other) をオーバーロードします。

この関数は Qt 6.9 で導入されました。

QSharedPointer::staticCast()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

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

src が保持するポインタへの共有ポインタを、X 型にキャストして返します。const_cast が成功するためには、T 型とX 型が同一の階層に属している必要があります。T とX の間のconst およびvolatile による違いは無視されます。

QSharedPointer::constCast()、qSharedPointerStaticCast()、およびqSharedPointerDynamicCast()も参照してください 。

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

src が保持するポインタへの共有ポインタを、X 型にキャストして返します。const_cast が成功するためには、T 型とX 型が同一の階層に属している必要があります。T とX の間のconst およびvolatile の違いは無視されます。

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

QWeakPointer::toStrongRef()、qSharedPointerStaticCast()、およびqSharedPointerDynamicCast()も参照してください 。

[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(QSharedPointer<T> &&src)

返されるQSharedPointer は、src と同じ共有所有者グループと所有権を共有します。

この関数resets は、成功した場合にsrc をnullptr に変換します。

この関数は、QSharedPointer::qSharedPointerConstCast(const QSharedPointer<T> &src) をオーバーロードします。

この関数は Qt 6.9 で導入されました。

QSharedPointer::constCast()、qSharedPointerStaticCast()、およびqSharedPointerDynamicCast()も参照してください 。

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

src が保持するポインタへの共有ポインタを返します。この際、X 型への動的キャストを行い、適切な型の内部ポインタを取得します。dynamic_cast が失敗した場合、返されるオブジェクトは null になります。

X は、T と同じ cv-修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードはコンパイルに失敗します。const 修飾子を解除するには、qSharedPointerConstCast を使用してください。

QSharedPointer::dynamicCast()、qSharedPointerStaticCast()、およびqSharedPointerConstCast()も参照してください 。

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

src が保持するポインタへの共有ポインタを返します。この際、X 型への動的キャストを行い、適切な型の内部ポインタを取得します。dynamic_cast が失敗した場合、返されるオブジェクトは null になります。

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

X は、T と同じcv修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードはコンパイルに失敗します。const性を解除するには、qSharedPointerConstCast を使用してください。

QWeakPointer::toStrongRef()、qSharedPointerStaticCast()、およびqSharedPointerConstCast()も参照してください 。

[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(QSharedPointer<T> &&src)

返されるQSharedPointer は、src と同じ共有所有者グループと所有権を共有します。

この関数resets は、成功した場合にsrc をnullptr に変換します。

この関数は、QSharedPointer::qSharedPointerDynamicCast(const QSharedPointer<T> &src) をオーバーロードします。

この関数は Qt 6.9 で導入されました。

QSharedPointer::dynamicCast()、qSharedPointerStaticCast()、および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 )を持つ必要があります。そうでない場合、コードのコンパイルに失敗します。const 修飾子を解除するには、qSharedPointerConstCast を使用してください。

QSharedPointer::objectCast()、qSharedPointerStaticCast()、およびqSharedPointerConstCast()も参照してください 。

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

qSharedPointerObjectCast 関数は、共有ポインタの型変換を行うためのものです。

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

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

X は、T と同じcv修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードはコンパイルに失敗します。const修飾子を解除するには、qSharedPointerConstCast を使用してください。

QWeakPointer::toStrongRef()、qSharedPointerStaticCast()、およびqSharedPointerConstCast()も参照してください 。

template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(const std::shared_ptr<T> &src)

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

なお、X は、T と同じcv修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードはコンパイルに失敗します。const修飾子を解除するには、const_pointer_castを使用してください。

template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(std::shared_ptr<T> &&src)

src が保持するポインタへの共有ポインタを返します。この際、qobject_cast() を使用してX の型を特定し、適切な型の内部ポインタを取得します。

qobject_cast が成功した場合、この関数は有効な共有ポインタを返し、src はnullにリセットされます。qobject_cast が失敗した場合、返されるオブジェクトはnullとなり、src は変更されません。

なお、X はT と同じcv修飾子(const およびvolatile )を持つ必要があることに注意してください。そうでない場合、コードはコンパイルに失敗します。const性を解除するには、const_pointer_castを使用してください。

[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(QSharedPointer<T> &&src)

返されるQSharedPointer は、src と同じ共有所有者グループと所有権を共有します。

この関数resets は、成功した場合にsrc をnullptr に変換します。

この関数は、QSharedPointer::qSharedPointerObjectCast(const QSharedPointer<T> &src) をオーバーロードします。

この関数は Qt 6.9 で導入されました。

QSharedPointer::objectCast()、qSharedPointerStaticCast()、およびqSharedPointerConstCast()も参照してください 。

[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(const QSharedPointer<T> &other)

other が保持するポインタへの共有ポインタを、X 型にキャストして返します。static_cast が成功するためには、T とX の型が同一の階層に属している必要があります。

なお、X はT と同じ cv 修飾子(const およびvolatile )を持つ必要があります。そうでない場合、コードはコンパイルに失敗します。qSharedPointerConstCast を使用して const 修飾子を解除してください。

この関数は Qt 6.12 で導入されました。

QSharedPointer::staticCast()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(const QWeakPointer<T> &other)

other が保持するポインタへの共有ポインタを、型X にキャストして返します。static_cast が成功するためには、型T とX が同一の階層に属している必要があります。

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

なお、X はT と同じcv修飾子(const およびvolatile )を持つ必要があります。そうでない場合、コードのコンパイルに失敗します。const修飾子を解除するには、qSharedPointerConstCast を使用してください。

この関数は Qt 6.12 で導入されました。

QWeakPointer::toStrongRef()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(QSharedPointer<T> &&other)

返されるQSharedPointer は、other と同じ共有所有者のセットと所有権を共有します。

この関数 `resets ` は、成功した場合に `other ` を `nullptr ` に変換します。

この関数は、QSharedPointer::qSharedPointerStaticCast(const QSharedPointer<T> &other) をオーバーロードします。

この関数は Qt 6.12 で導入されました。

QSharedPointer::staticCast()、qSharedPointerDynamicCast()、およびqSharedPointerConstCast()も参照してください 。

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> &lhs, const QSharedPointer<X> &rhs)

lhs とrhs が異なるポインタを指している場合、true を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらが互換性のある型であることを確認する必要があります。この関数は、T およびX の型を、それらの複合ポインタ型に変換するために、自動的なstatic_cast を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイルエラーが発生します。

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

lhs とrhs が異なるポインタを指している場合、true を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらの型が互換性があることを確認する必要があります。この関数は、T とX の型を、それらの複合ポインタ型に変換するために、自動的な `static_cast ` を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイルエラーが発生します。

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 *lhs, const QSharedPointer<X> &rhs)

ポインタ `lhs ` が `rhs` で参照されているポインタと同一でない場合、true を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらが互換性のある型であることを確認する必要があります。この関数は、T とX の型を複合ポインタ型に変換するために、自動的なstatic_cast を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイルエラーが発生します。

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> &lhs, const QSharedPointer<X> &rhs)

lhs とrhs が同じポインタを指している場合、true を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらが互換性のある型であることを確認する必要があります。この関数は、T とX の型を複合ポインタ型に変換するために、自動的なstatic_cast を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイルエラーが発生します。

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

lhs とrhs が同じポインタを指している場合、true を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらが互換性のある型であることを確認する必要があります。この関数は、T とX の型を複合ポインタ型に変換するために、自動的なstatic_cast を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイルエラーが発生します。

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 *lhs, const QSharedPointer<X> &rhs)

ポインタ `lhs ` が `rhs` で参照されているポインタと同一である場合、`true ` を返します。

rhs のテンプレートパラメータがlhs のものと異なる場合、QSharedPointer はまず、それらが互換性のある型であることを確認する必要があります。この関数は、T とX の型を複合ポインタ型に変換するために、自動的なstatic_cast を実行しようとします。rhs のテンプレートパラメータがlhs の基底型または派生型でない場合、コンパイラエラーが発生します。

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

rhs がnullptr を指している場合、true を返します。

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

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