Класс 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. Если эта функция может определить, что указатель уже был удалён, она возвращает nullptr.
Это допустимо получить значение указателя и использовать его само по себе, например, в отладочных утверждениях:
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().
END_OF_DOCUMENT_MARKERbool 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 для удаления константности.
См. также 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 для получения внутреннего указателя соответствующего типа. Если dynamic_cast не удаётся, возвращаемый объект будет нулевым.
Объект src сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что на который указывает объект уже удалён), эта функция также возвращает нулевой QSharedPointer.
Обратите внимание, что X должны иметь те же квалификаторы cv (const и volatile), что и T, в противном случае код не будет компилироваться. Используйте qSharedPointerConstCast для удаления константности.
См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerConstCast().
QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
Функция qSharedPointerObjectCast предназначена для приведения указателя на общий ресурс.
Возвращает указатель на общий ресурс, содержащийся в src, используя qobject_cast() к типу X для получения внутреннего указателя соответствующего типа. Если qobject_cast не удаётся, возвращаемый объект будет нулевым.
Объект src сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что на который указывает объект уже удалён), эта функция также возвращает нулевой QSharedPointer.
Обратите внимание, что X должны иметь те же квалификаторы cv (const и volatile), что и T, в противном случае код не будет компилироваться. Используйте qSharedPointerConstCast для удаления константности.
Эта функция была добавлена в 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 для удаления константности.
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, является нулевым указателем.
Эта функция была добавлена в Qt 5.8.
См. также QWeakPointer::isNull().
bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)
Возвращает true, если указатель, на который ссылается rhs, является нулевым указателем.
Данная функция была добавлена в 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.12/qweakpointer.html