Класс QWeakPointer
Класс QWeakPointer хранит слабую ссылку на общий указатель. Подробнее...
| Заголовок: | #include <QWeakPointer> |
| qmake: | QT += core |
| С момента: | Qt 4.5 |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QWeakPointer() | |
| QWeakPointer(const QWeakPointer<T> &other) | |
| QWeakPointer(const QSharedPointer<T> &other) | |
| ~QWeakPointer() | |
| void | clear() |
| T * | data() const |
| bool | isNull() const |
| QSharedPointer<T> | lock() const |
| void | swap(QWeakPointer<T> &other) |
| QSharedPointer<T> | toStrongRef() const |
| bool | operator bool() const |
| bool | operator!() const |
| QWeakPointer<T> & | operator=(const QWeakPointer<T> &other) |
| QWeakPointer<T> & | operator=(const QSharedPointer<T> &other) |
Связанные нечлены
| QSharedPointer<X> | qSharedPointerCast(const QWeakPointer<T> &other) |
| QSharedPointer<X> | qSharedPointerConstCast(const QWeakPointer<T> &src) |
| QSharedPointer<X> | qSharedPointerDynamicCast(const QWeakPointer<T> &src) |
| QSharedPointer<X> | qSharedPointerObjectCast(const QWeakPointer<T> &src) |
| 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 хранит слабую ссылку на общий указатель.
Класс QWeakPointer — это автоматическая слабая ссылка на указатель в C++. Он не может использоваться для непосредственного разыменования указателя, но может использоваться для проверки того, был ли указатель удален или нет в другом контексте.
Объекты QWeakPointer могут быть созданы только путем присваивания из QSharedPointer.
Важно отметить, что QWeakPointer не предоставляет автоматических операторов преобразования, чтобы предотвратить ошибки. Несмотря на то, что QWeakPointer отслеживает указатель, его не следует рассматривать как указатель сам по себе, поскольку он не гарантирует, что указанный объект останется действительным.
Поэтому, чтобы получить доступ к указателю, отслеживаемому QWeakPointer, необходимо сначала преобразовать его в QSharedPointer и проверить, является ли полученный объект нулевым или нет. QSharedPointer гарантирует, что объект не будет удален, поэтому, если вы получите ненулевой объект, вы можете использовать указатель. См. QWeakPointer::toStrongRef() для примера.
QWeakPointer также предоставляет метод QWeakPointer::data(), который возвращает отслеживаемый указатель без гарантии, что он останется действительным. Эта функция предоставляется, если вы можете гарантировать внешними средствами, что объект не будет удален (или если вам нужен только значение указателя), а затраты на создание QSharedPointer с помощью toStrongRef() слишком высоки.
См. также QSharedPointer и QScopedPointer.
Документация по членам-функциям
QWeakPointer::QWeakPointer()
Создает QWeakPointer, который не указывает ни на что.
QWeakPointer::QWeakPointer(const QWeakPointer<T> &other)
Создает QWeakPointer, который хранит слабую ссылку на указатель, на который указывает other.
Если T является производным типом шаблона параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае вы получите ошибку компилятора.
QWeakPointer::QWeakPointer(const QSharedPointer<T> &other)
Создает QWeakPointer, который хранит слабую ссылку на указатель, на который указывает other.
Если T является производным типом шаблона параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае вы получите ошибку компилятора.
QWeakPointer::~QWeakPointer()
Удаляет этот объект QWeakPointer. Указатель, на который ссылается этот объект, не будет удалён.
void QWeakPointer::clear()
Очищает этот объект QWeakPointer, удаляя ссылку, которую он мог иметь на указатель.
T *QWeakPointer::data() const
Возвращает значение указателя, отслеживаемого этим QWeakPointer, без гарантии, что он не может быть удален. Для получения такой гарантии используйте toStrongRef(), которая возвращает объект QSharedPointer. Если эта функция может определить, что указатель уже был удалён, она возвращает 0.
В порядке получения значения указателя и использования этого значения, например, в отладочных утверждениях:
qDebug("Tracking %p", weakref.data()); Однако, разыменование указателя разрешается только в том случае, если вы можете гарантировать внешними средствами, что указатель не будет удалён. Например, если вы можете быть уверены, что ни одна другая нить не может его удалить, ни функции, которые вы можете вызвать.
Если это так, то следующий код является допустимым:
// this pointer cannot be used in another thread
// so other threads cannot delete it
QWeakPointer<int> weakref = obtainReference();
Object *obj = weakref.data();
if (obj) {
// if the pointer wasn't deleted yet, we know it can't get
// deleted by our own code here nor the functions we call
otherFunction(obj);
} Используйте эту функцию с осторожностью.
Эта функция была введена в Qt 4.6.
См. также isNull() и toStrongRef().
bool QWeakPointer::isNull() const
Возвращает true если этот объект содержит ссылку на нулевой указатель.
Обратите внимание, что из-за природы слабых ссылок, указатель, на который ссылается QWeakPointer, может стать нулевым в любой момент, поэтому возвращаемое значение этой функции может измениться с 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 если этот объект не равен null. Эта функция подходит для использования в if-constructs, например:
if (weakref) { ... } Обратите внимание, что из-за природы слабых ссылок, указатель, на который ссылается QWeakPointer, может стать нулевым в любой момент, поэтому возвращаемое значение этой функции может измениться с true на false от одного вызова к другому.
См. также isNull().
bool QWeakPointer::operator!() const
Возвращает true если этот объект равен null. Эта функция подходит для использования в if-constructs, например:
if (!weakref) { ... } Обратите внимание, что из-за природы слабых ссылок, указатель, на который ссылается QWeakPointer, может стать нулевым в любой момент, поэтому возвращаемое значение этой функции может измениться с false на true от одного вызова к другому.
См. также isNull().
QWeakPointer<T> &QWeakPointer::operator=(const QWeakPointer<T> &other)
Привязывает этот объект к указателю other. Текущая ссылка на указатель отбрасывается, но не удаляется.
Если T является производным типом шаблона параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае вы получите ошибку компилятора.
QWeakPointer<T> &QWeakPointer::operator=(const QSharedPointer<T> &other)
Привязывает этот объект к указателю other. Текущая ссылка на указатель отбрасывается, но не удаляется.
Если T является производным типом шаблона параметра этого класса, QWeakPointer выполнит автоматическое преобразование. В противном случае вы получите ошибку компилятора.
Связанные нечлены
QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
Возвращает общий указатель на указатель, удерживаемый other, приведённый к типу X. Типы T и X должны принадлежать одной иерархии для успешного выполнения static_cast.
Объект other сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который он указывает, уже удалён), эта функция возвращает нулевой QSharedPointer.
Обратите внимание, что X должен иметь те же cv-квалификаторы (const и volatile), что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast, чтобы отбросить const.
См. также QWeakPointer::toStrongRef(), qSharedPointerDynamicCast() и qSharedPointerConstCast().
QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
Возвращает общий указатель на указатель, удерживаемый src, приведённый к типу X. Типы T и X должны принадлежать одной иерархии для успешного выполнения const_cast. Различия const и volatile между T и X игнорируются.
Объект src сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который он указывает, уже удалён), эта функция возвращает нулевой QSharedPointer.
См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerDynamicCast().
QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
Возвращает общий указатель на указатель, удерживаемый src, используя динамическое приведение к типу X, чтобы получить внутренний указатель соответствующего типа. Если динамическое приведение не удаётся, возвращаемый объект будет нулевым.
Объект src сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который он указывает, уже удалён), эта функция также возвращает нулевой QSharedPointer.
Обратите внимание, что X должен иметь те же cv-квалификаторы (const и volatile), что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast, чтобы отбросить const.
См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerConstCast().
QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
Функция qSharedPointerObjectCast предназначена для приведения общих указателей.
Возвращает общий указатель на указатель, удерживаемый src, используя qobject_cast() к типу X, чтобы получить внутренний указатель соответствующего типа. Если приведение не удаётся, возвращаемый объект будет нулевым.
Объект src сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который он указывает, уже удалён), эта функция также возвращает нулевой QSharedPointer.
Обратите внимание, что X должен иметь те же cv-квалификаторы (const и volatile), что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast, чтобы отбросить const.
Функция была добавлена в Qt 4.6.
См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerConstCast().
QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
Возвращает слабый указатель на указатель, удерживаемый src, приведённый к типу X. Типы T и X должны принадлежать одной иерархии для успешного выполнения static_cast.
Обратите внимание, что X должен иметь те же cv-квалификаторы (const и volatile), что и T, иначе код не будет компилироваться. Используйте qSharedPointerConstCast, чтобы отбросить const.
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, является действительным (т. е. не нулевым) указателем.
Функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
Возвращает true, если указатель, на который ссылается rhs, является действительным (т. е. не нулевым) указателем.
Функция была добавлена в 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==(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, равен null.
Функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)
Возвращает true, если указатель, на который ссылается rhs, равен null.
Данная функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qweakpointer.html