Spec-Zone.ru › Qt 6.0

Класс QWeakPointer

шаблон <typename T> class QWeakPointer

Класс QWeakPointer хранит слабую ссылку на общий указатель. Подробнее...

Заголовок: #include <QWeakPointer>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Примечание: Все функции в этом классе являются реентерабельными.

Открытые функции

QWeakPointer(const QSharedPointer<T> &other)
QWeakPointer(const QWeakPointer<T> &other)
QWeakPointer()
QWeakPointer<T> & operator=(const QSharedPointer<T> &other)
QWeakPointer<T> & operator=(const QWeakPointer<T> &other)
~QWeakPointer()
void clear()
bool isNull() const
QSharedPointer<T> lock() const
void swap(QWeakPointer<T> &other)
QSharedPointer<T> toStrongRef() const
bool operator bool() const
bool operator!() const

Связанные нечлены

QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

Подробное описание

QWeakPointer — это автоматическая слабая ссылка на указатель в C++. Её нельзя использовать для непосредственного разыменования указателя, но она может использоваться для проверки, был ли указатель удалён в другом контексте.

Объекты QWeakPointer могут создаваться только путём присваивания от QSharedPointer.

Важно отметить, что QWeakPointer не предоставляет автоматических операторов преобразования, чтобы предотвратить ошибки. Несмотря на то, что QWeakPointer отслеживает указатель, его нельзя рассматривать как указатель сам по себе, так как он не гарантирует, что указанный объект останется действительным.

Поэтому, чтобы получить доступ к указателю, отслеживаемому QWeakPointer, необходимо сначала преобразовать его в QSharedPointer и проверить, является ли полученный объект нулевым или нет. QSharedPointer гарантирует, что объект не будет удалён, поэтому если вы получите ненулевой объект, вы можете использовать указатель. См. QWeakPointer::toStrongRef() для примера.

См. также QSharedPointer и QScopedPointer.

Документация по членам-функциям

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

Создаёт QWeakPointer, который хранит слабую ссылку на указатель, на который ссылается other.

Если T является производным типом от шаблона-параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае возникнет ошибка компилятора.

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

Создаёт QWeakPointer, который хранит слабую ссылку на указатель, на который ссылается other.

Если T является производным типом от шаблона-параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае возникнет ошибка компилятора.

QWeakPointer::QWeakPointer()

Создаёт QWeakPointer, который не ссылается ни на что.

QWeakPointer<T> &QWeakPointer::operator=(const QSharedPointer<T> &other)

Заставляет этот объект использовать указатель other. Текущая ссылка на указатель удаляется, но не удаляется.

Если T является производным типом от шаблона-параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае возникнет ошибка компилятора.

QWeakPointer<T> &QWeakPointer::operator=(const QWeakPointer<T> &other)

Заставляет этот объект использовать указатель other. Текущая ссылка на указатель удаляется, но не удаляется.

Если T является производным типом от шаблона-параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае возникнет ошибка компилятора.

QWeakPointer::~QWeakPointer()

Уничтожает этот объект QWeakPointer. Указатель, на который ссылается этот объект, не будет удалён.

void QWeakPointer::clear()

Очищает этот объект QWeakPointer, отпуская ссылку на указатель, если она была.

bool QWeakPointer::isNull() const

Возвращает true если этот объект ссылается на nullptr.

Обратите внимание, что из-за природы слабых ссылок, указатель, на который ссылается QWeakPointer, может стать nullptr в любой момент, поэтому значение, возвращаемое этой функцией, может измениться с false на true от одного вызова к другому.

QSharedPointer<T> QWeakPointer::lock() const

То же, что и toStrongRef().

Эта функция предоставляется для совместимости API со std::weak_ptr.

Эта функция была добавлена в Qt 5.4.

void QWeakPointer::swap(QWeakPointer<T> &other)

Меняет местами этот слабый указатель с other. Эта функция очень быстрая и никогда не терпит неудач.

Эта функция была добавлена в Qt 5.4.

QSharedPointer<T> QWeakPointer::toStrongRef() const

Преобразует эту слабую ссылку в сильную и возвращает объект QSharedPointer, содержащий эту ссылку. При преобразовании в QSharedPointer эта функция проверяет, был ли объект уже удален. Если нет, эта функция увеличивает счетчик ссылок на общий объект, тем самым гарантируя, что он не будет удален.

Поскольку эта функция может не получить действительную сильную ссылку на общий объект, вы всегда должны проверить, удалось ли преобразование, вызвав QSharedPointer::isNull() на возвращённом объекте.

Например, следующий код преобразует QWeakPointer, на который ссылались, в сильную ссылку и, если это удалось, выводит значение целого числа, на которое ссылались:

    QWeakPointer<int> weakref;

    // ...

    QSharedPointer<int> strong = weakref.toStrongRef();
    if (strong)
        qDebug() << "The value is:" << *strong;
    else
        qDebug() << "The value has already been deleted";

См. такжеQSharedPointer::QSharedPointer().

bool QWeakPointer::operator bool() const

Возвращает true , если содержащийся указатель не nullptr. Эта функция подходит для использования в if-constructs, например:

    if (weakref) { ... }

Обратите внимание, что из-за особенностей слабых ссылок, на который ссылается QWeakPointer, может стать nullptr в любой момент, поэтому значение, возвращаемое этой функцией, может измениться с true на false от одного вызова к другому.

См. такжеisNull().

bool QWeakPointer::operator!() const

Возвращает true , если этот объект ссылается на nullptr. Эта функция подходит для использования в if-constructs, например:

    if (!weakref) { ... }

Обратите внимание, что из-за особенностей слабых ссылок, на который ссылается QWeakPointer, может стать nullptr в любой момент, поэтому значение, возвращаемое этой функцией, может измениться с false на true от одного вызова к другому.

См. такжеisNull().

Связанные нечленные функции

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

Возвращает слабую ссылку на указатель, содержащийся в src, преобразованный к типу X. Типы T и X должны принадлежать одной иерархии для того, чтобы static_cast выполнилось успешно.

Обратите внимание, что X должны иметь те же квалификаторы cv (const и volatile), что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast для отбрасывания const.

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

Возвращает true , если ptr1 и ptr2 ссылаются на разные указатели.

Если параметр шаблона ptr2 отличается от параметра шаблона ptr1, QSharedPointer попытается выполнить автоматическое static_cast , чтобы убедиться, что сравниваемые указатели равны. Если параметр шаблона ptr2 не является базовым или производным типом от параметра шаблона ptr1, вы получите ошибку компилятора.

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

Возвращает true , если ptr1 и ptr2 ссылаются на разные указатели.

Если параметр шаблона ptr2 отличается от параметра шаблона ptr1, QSharedPointer попытается выполнить автоматическое static_cast , чтобы убедиться, что сравниваемые указатели равны. Если параметр шаблона ptr2 не является базовым или производным типом от параметра шаблона ptr1, вы получите ошибку компилятора.

[since 5.8] template <typename T> bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)

Возвращает true , если lhs ссылается на допустимый (т.е. не нулевой) указатель.

Эта функция была добавлена в Qt 5.8.

См. такжеQWeakPointer::isNull().

[since 5.8] template <typename T> bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)

Возвращает true , если rhs ссылается на допустимый (т.е. не нулевой) указатель.

Эта функция была добавлена в Qt 5.8.

См. такжеQWeakPointer::isNull().

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

Возвращает true , если ptr1 и ptr2 ссылаются на один и тот же указатель.

Если параметр шаблона ptr2 отличается от параметра шаблона ptr1, QSharedPointer попытается выполнить автоматическое static_cast , чтобы убедиться, что сравниваемые указатели равны. Если параметр шаблона ptr2 не является базовым или производным типом от параметра шаблона ptr1, вы получите ошибку компилятора.

[since 5.8] template <typename T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)

Возвращает true , если lhs ссылается на nullptr.

Эта функция была добавлена в Qt 5.8.

См. такжеQWeakPointer::isNull().

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

Возвращает true , если ptr1 и ptr2 ссылаются на один и тот же указатель.

Если параметр шаблона ptr2 отличается от параметра шаблона ptr1, QSharedPointer попытается выполнить автоматическое static_cast , чтобы убедиться, что сравниваемые указатели равны. Если параметр шаблона ptr2 не является базовым или производным типом от параметра шаблона ptr1, вы получите ошибку компилятора.

[since 5.8] template <typename T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

Возвращает true , если rhs ссылается на nullptr.

Эта функция была добавлена в Qt 5.8.

См. такжеQWeakPointer::isNull().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qweakpointer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API