QPointer Class

template <typename T> class QPointer

QPointer クラスは、QObject へのガード付きポインタを提供するテンプレート・クラスです。さらに...

Header: #include <QPointer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

このクラスは等比級数です。

このクラスは QPointer<X>, X*, std::nullptr_t と等価比較可能です。

ここで X と T は互換性のある型であり,(cv-修飾子を除いて)同じであるか,あるいは一方が他方の基底型であることを意味します.

パブリック関数

QPointer()
(since 6.6) QPointer(QPointer<X> &&other)
QPointer(T *p)
(since 6.6) QPointer(const QPointer<X> &other)
QPointer(std::nullptr_t)
~QPointer()
void clear()
T *data() const
(since 6.0) T *get() const
bool isNull() const
void swap(QPointer<T> &other)
T *operator T *() const
T &operator*() const
T *operator->() const
(since 6.6.1) QPointer<T> &operator=(QPointer<X> &&other)
QPointer<T> &operator=(T *p)
(since 6.6) QPointer<T> &operator=(const QPointer<X> &other)
bool operator!=(X *const &lhs, const QPointer<T> &rhs)
bool operator!=(const QPointer<T> &lhs, X *const &rhs)
bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)
bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)
bool operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs)
bool operator==(X *const &lhs, const QPointer<T> &rhs)
bool operator==(const QPointer<T> &lhs, X *const &rhs)
bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)
bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)
bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)

詳細説明

ガード付きポインタ(QPointer<T>)は、通常の C++ ポインタT * のように振る舞いますが、参照先のオブジェクトが破棄されると自動的にクリアされます(通常の C++ ポインタとは異なり、このような場合は「ぶら下がりポインタ」になります)。TQObject のサブクラスでなければなりません。

ガード付きポインタは、他の人が所有するQObject へのポインタを格納する必要がある場合に便利です。ポインタの有効性を安全にテストすることができます。

Qt 5では、QPointerを使用する際の動作に若干の変更が加えられていることに注意してください。

  • QPointerをQWidget (またはQWidget のサブクラス)で使用する場合、以前はQWidget のデストラクタによってQPointerがクリアされていました。現在、QPointer はQObject デストラクタによってクリアされます(これはQWeakPointer オブジェクトがクリアされるときであるため)。ウィジェットをトラッキングしている QPointer は、QWidget デストラクタがトラッキングしているウィジェットの子を破棄する前にクリアされません

Qt は、参照カウント共有ポインタオブジェクトの実装であるQSharedPointer も提供しており、個々のポインタへの参照のコレクションを保持するために使用できます。

    QPointer<QLabel> label = new QLabel;
    label->setText("&Status:");
    ...
    if (label)
        label->show();

例:QLabel がその間に削除された場合、label 変数には無効なアドレスの代わりにnullptr が保持され、最後の行は決して実行されません。

QPointerで使用できる関数や演算子は、通常のガードされていないポインタで使用できるものと同じです。ただし、ポインタの算術演算子(+,-,++,-- )は、通常オブジェクトの配列でのみ使用されます。

QPointersを通常のポインタと同じように使えば、このクラスのドキュメントを読む必要はありません。

ガード付きポインタを作成するには、T*または同じ型の別のガード付きポインタからポインタを作成したり、代入したりします。operator==()やoperator!=()を使ってポインタ同士を比較したり、isNull()を使ってnullptr*x 、またはx->member 記法を使用して、ポインタを再参照することができます。

ガードされたポインタは自動的にT * にキャストされるので、ガードされたポインタとガードされていないポインタを自由に混在させることができます。つまり、QPointer<QWidget>があれば、QWidget *を必要とする関数に渡すことができます。このような理由から、QPointerをパラメータとして受け取る関数を宣言することはあまり意味がありません。QPointerは、時間経過とともにポインタを保存する場合に使用します。

クラスTQObject を継承しなければならない。

QSharedPointerQObjectQObjectCleanupHandlerも参照してください

メンバ関数ドキュメント

[noexcept] QPointer::QPointer()

[constexpr noexcept] QPointer::QPointer(std::nullptr_t)

nullptr を持つガード付きポインタを構築する。

isNull()も参照

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer::QPointer(QPointer<X> &&other)

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer::QPointer(const QPointer<X> &other)

変換コンストラクタ。other から移動またはコピーして新しいQPointer を構築します。

移動元のQPointer は nullptr にリセットされます。

注意: これらのコンストラクタは、X*T* に変換可能な場合にのみ、オーバーロード解決に参加します。

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

QPointer::QPointer(T *p)

p が指すオブジェクトと同じオブジェクトを指すガードされたポインタを構築します。

QPointer::~QPointer()

ガードされたポインタを破棄します。通常のポインタと同様に、ガードされたポインタを破棄しても、指されているオブジェクトは破棄されません。

[noexcept] void QPointer::clear()

このQPointer オブジェクトをクリアします。

isNull()も参照

[noexcept] T *QPointer::data() const

ガードされているオブジェクトへのポインタを返します。

[noexcept, since 6.0] T *QPointer::get() const

data() と同じ。この関数は STL との互換性のために提供されています。

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

[noexcept] bool QPointer::isNull() const

参照されているオブジェクトが破棄されているか、参照されているオブジェクトがない場合はtrue を返し、そうでない場合はfalse を返します。

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

このQPointer の内容とother の内容を入れ替えます。この操作は非常に高速で、失敗することはありません。

[noexcept] T *QPointer::operator T *() const

キャスト演算子;ポインタ・セマンティクスを実装しています。この関数のおかげで、QPointer<T>をT*が必要な関数に渡すことができます。

[noexcept] T &QPointer::operator*() const

Dereference 演算子; ポインタのセマンティクスを実装しています。この演算子は、通常の C++ ポインタと同じように使用します。

[noexcept] T *QPointer::operator->() const

ポインタのセマンティクスを実装しています。この演算子は、通常の C++ ポインタと同じように使用してください。

[noexcept, since 6.6.1] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(QPointer<X> &&other)

変換移動代入演算子。このガードされたポインタを、other によってガードされたのと同じオブジェクトをガードするようにし、other を nullptr にリセットします。

注意: この演算子は、X*T* に変換可能な場合にのみ、オーバーロード解決に参加します。

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

QPointer<T> &QPointer::operator=(T *p)

代入演算子。このガードされたポインタは、p が指すのと同じオブジェクトを指すようになります。

[noexcept, since 6.6] template <typename X, QPointer<T>::if_convertible<X> = true> QPointer<T> &QPointer::operator=(const QPointer<X> &other)

変換代入演算子。このガードされたポインタは、other によってガードされたのと同じオブジェクトをガードするようになります。

注意: この演算子は、X*T* に変換可能な場合にのみ、オーバーロード解決に参加します。

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

関連する非メンバー

[noexcept] template <typename X> bool operator!=(X *const &lhs, const QPointer<T> &rhs)

不等式演算子。lhs とガードされたポインタrhs が同じオブジェクトを指していない場合はtrue を返し、そうでない場合はfalse を返します。

[noexcept] template <typename X> bool operator!=(const QPointer<T> &lhs, X *const &rhs)

不等式演算子。rhs とガードされたポインタlhs が同じオブジェクトを指していなければtrue を返し、そうでなければfalse を返す。

[noexcept(...)] template <typename X> bool operator!=(const QPointer<T> &lhs, const QPointer<X> &rhs)

不等式演算子。ガードされたポインタlhsrhs が同じオブジェクトを指していなければtrue を返し、そうでなければfalse を返す。

注意: この関数は、"true "が真の場合、例外をスローしない。

[noexcept] bool operator!=(const QPointer<T> &lhs, const std::nullptr_t &rhs)

不等号演算子。lhs でガードされたポインタが有効な(つまりnullptr ではない)ポインタであればtrue を返し、そうでなければfalse を返す。

[noexcept] bool operator!=(const std::nullptr_t &lhs, const QPointer<T> &rhs)

不等式演算子。rhs でガードされたポインタが有効な(つまりnullptr ではない)ポインタである場合はtrue を返し、そうでない場合はfalse を返す。

[noexcept] template <typename X> bool operator==(X *const &lhs, const QPointer<T> &rhs)

等号演算子。lhs とガードされたポインタrhs が同じオブジェクトを指していればtrue を返し、そうでなければfalse を返す。

[noexcept] template <typename X> bool operator==(const QPointer<T> &lhs, X *const &rhs)

等号演算子。rhs とガードされたポインタlhs が同じオブジェクトを指している場合はtrue を返し、そうでない場合はfalse を返す。

[noexcept(...)] template <typename X> bool operator==(const QPointer<T> &lhs, const QPointer<X> &rhs)

等号演算子。ガードされたポインタlhsrhs が同じオブジェクトを指している場合はtrue を返し、そうでない場合はfalse を返します。

注意: この関数は、"true "が真の場合、例外をスローしない。

[noexcept] bool operator==(const QPointer<T> &lhs, const std::nullptr_t &rhs)

等号演算子。lhs でガードされたポインタがnullptr の場合はtrue を返し、そうでない場合はfalse を返す。

[noexcept] bool operator==(const std::nullptr_t &lhs, const QPointer<T> &rhs)

等号演算子。rhs でガードされたポインタがnullptr である場合はtrue を返し、そうでない場合はfalse を返す。

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