Класс 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> &lhs, std::nullptr_t) |
| bool | operator!=(std::nullptr_t, const QWeakPointer<T> &rhs) |
| bool | operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
| 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) |
Подробное описание
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 для отбрасывания константности.
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 ссылается на действительный (то есть не нулевой) указатель.
Эта функция была введена в 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 QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
Возвращает true , если ptr1 и ptr2 ссылаются на разные указатели.
Если параметр шаблона ptr2 отличается от параметра шаблона ptr1, QSharedPointer попытается выполнить автоматическое static_cast для обеспечения равенства сравниваемых указателей. Если параметр шаблона ptr2 не является базовым или производным типом от ptr1, вы получите ошибку компилятора.
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 ссылается на nullptr.
Эта функция была введена в Qt 5.8.
См. также QWeakPointer::isNull().
[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.2/qweakpointer.html