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