Класс QWeakPointer
Класс QWeakPointer хранит слабую ссылку на указатель shared_ptr. Подробнее...
| Заголовок: | #include <QWeakPointer> |
| qmake: | QT += core |
| С момента: | Qt 4.5 |
Этот класс был представлен в Qt 4.5.
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| 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 эта функция проверяет, не был ли объект уже удалён. Если нет, эта функция увеличивает счётчик ссылок на общий объект, тем самым гарантируя, что он не будет удалён.
END_OF_DOCUMENT_MARKERПоскольку эта функция может не получить действительную сильную ссылку на общий объект, вы всегда должны проверять, произошла ли конвертация успешно, вызвав 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().
Связанные нечлены
QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
Возвращает слабый указатель на указатель, содержащийся в src, преобразованный к типу X. Типы T и X должны принадлежать одной иерархии для static_cast.
Обратите внимание, что X должен иметь те же cv-квалификаторы (const и volatile) что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast для отбрасывания константности.
bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
Возвращает true если ptr1 и ptr2 ссылаются на разные указатели.
Если шаблонный параметр ptr2 отличается от шаблонного параметра ptr1, QSharedPointer попытается выполнить автоматическое static_cast для обеспечения того, что сравниваемые указатели равны. Если шаблонный параметр ptr2 не является базовым или производным типом от шаблонного параметра ptr1, вы получите ошибку компилятора.
bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
Возвращает true если ptr1 и ptr2 ссылаются на разные указатели.
Если шаблонный параметр ptr2 отличается от шаблонного параметра ptr1, QSharedPointer попытается выполнить автоматическое static_cast для обеспечения того, что сравниваемые указатели равны. Если шаблонный параметр ptr2 не является базовым или производным типом от шаблонного параметра ptr1, вы получите ошибку компилятора.
bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
Возвращает true если lhs ссылается на допустимый (т. е. не нулевой) указатель.
Эта функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
Возвращает true если rhs ссылается на допустимый (т. е. не нулевой) указатель.
Эта функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
Возвращает true если ptr1 и ptr2 ссылаются на тот же указатель.
Если шаблонный параметр ptr2 отличается от шаблонного параметра ptr1, QSharedPointer попытается выполнить автоматическое static_cast для обеспечения того, что сравниваемые указатели равны. Если шаблонный параметр ptr2 не является базовым или производным типом от шаблонного параметра ptr1, вы получите ошибку компилятора.
bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
Возвращает true если lhs ссылается на nullptr.
Эта функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
Возвращает true если ptr1 и ptr2 ссылаются на тот же указатель.
Если шаблонный параметр ptr2 отличается от шаблонного параметра ptr1, QSharedPointer попытается выполнить автоматическое static_cast для обеспечения того, что сравниваемые указатели равны. Если шаблонный параметр ptr2 не является базовым или производным типом от шаблонного параметра ptr1, вы получите ошибку компилятора.
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-5.14/qweakpointer.html