Класс QPointer
Класс QPointer — это шаблонный класс, предоставляющий защищенные указатели на QObject. Подробнее...
| Заголовок: | #include <QPointer> |
| qmake: | QT += core |
Открытые функции
| QPointer() | |
| QPointer(T *p) | |
| ~QPointer() | |
| void | clear() |
| T * | data() const |
| bool | isNull() const |
| void | swap(QPointer &other) |
| operator T *() const | |
| T & | operator*() const |
| T * | operator->() const |
| QPointer<T> & | operator=(T *p) |
Связанные нечлены
| bool | operator!=(const T *o, const QPointer<T> &p) |
| bool | operator!=(const QPointer<T> &p, const T *o) |
| bool | operator!=(T *o, const QPointer<T> &p) |
| bool | operator!=(const QPointer<T> &p, T *o) |
| bool | operator!=(const QPointer<T> &p1, const QPointer<T> &p2) |
| bool | operator==(const T *o, const QPointer<T> &p) |
| bool | operator==(const QPointer<T> &p, const T *o) |
| bool | operator==(T *o, const QPointer<T> &p) |
| bool | operator==(const QPointer<T> &p, T *o) |
| bool | operator==(const QPointer<T> &p1, const QPointer<T> &p2) |
Подробное описание
Класс QPointer — это шаблонный класс, предоставляющий защищенные указатели на QObject.
Защищенный указатель QPointer<T> ведет себя как обычный указатель C++, за исключением того, что он автоматически устанавливается в 0, когда ссылка на объект уничтожается (в отличие от обычных указателей C++, которые в таких случаях становятся «висячими указателями»). T *, тип T должен быть подклассом QObject.
Защищенные указатели полезны всякий раз, когда вам нужно сохранить указатель на QObject, который принадлежит кому-то другому и, следовательно, может быть уничтожен, пока у вас все еще есть ссылка на него. Вы можете безопасно проверить указатель на валидность.
Обратите внимание, что Qt 5 вносит небольшое изменение в поведение при использовании QPointer.
- При использовании QPointer на QWidget (или подклассе QWidget), ранее QPointer очищался деструктором QWidget. Теперь QPointer очищается деструктором QObject (поскольку именно тогда очищаются объекты QWeakPointer). Любые QPointer, отслеживающие виджет, НЕ БУДУТ очищены до того, как деструктор QWidget уничтожит дочерние элементы отслеживаемого виджета.
Qt также предоставляет QSharedPointer, реализацию ссылочно-счетного общего указателя, которая может использоваться для поддержания коллекции ссылок на отдельный указатель.
Пример:
QPointer<QLabel> label = new QLabel;
label->setText("&Status:");
...
if (label)
label->show(); Если QLabel будет удален в это время, переменная label будет содержать 0 вместо недействительного адреса, и последняя строка никогда не будет выполнена.
Функции и операторы, доступные с QPointer, такие же, как и у обычного незащищенного указателя, за исключением операторов арифметики указателей (+, -, ++, и --), которые обычно используются только с массивами объектов.
Используйте QPointer как обычные указатели, и вам не нужно будет читать документацию по этому классу.
Для создания защищенных указателей можно создавать или присваивать их из T* или из другого защищенного указателя того же типа. Вы можете сравнивать их друг с другом с помощью operator==() и operator!=(), или проверять на 0 с помощью isNull(). Вы можете получить доступ к ним с помощью обозначения *x или x->member.
Защищенный указатель автоматически преобразуется в T *, поэтому вы можете свободно смешивать защищенные и незащищенные указатели. Это означает, что если у вас есть QPointer<QWidget>, вы можете передать его в функцию, которая требует QWidget *. По этой причине мало смысла объявлять функции, которые принимают QPointer в качестве параметра; просто используйте обычные указатели. Используйте QPointer, когда вы храните указатель со временем.
Обратите внимание, что класс T должен унаследовать от QObject, иначе произойдет ошибка компиляции или компоновки.
См. также QSharedPointer, QObject и QObjectCleanupHandler.
Документация по членам-функциям
QPointer::QPointer()
Конструирует защищенный указатель со значением 0.
См. также isNull().
QPointer::QPointer(T *p)
Конструирует защищенный указатель, который указывает на тот же объект, что и p.
QPointer::~QPointer()
Уничтожает защищенный указатель. Как и обычный указатель, уничтожение защищенного указателя не уничтожает указываемый объект.
void QPointer::clear()
Очищает этот объект QPointer.
Эта функция была добавлена в Qt 5.0.
См. также isNull().
T *QPointer::data() const
Возвращает указатель на защищаемый объект.
Эта функция была добавлена в Qt 4.4.
bool QPointer::isNull() const
Возвращает true, если сохранённый объект был уничтожен или если не сохранено никакого объекта; в противном случае возвращает false.
void QPointer::swap(QPointer &other)
Меняет содержимое этого QPointer на содержимое other. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 5.6.
QPointer::operator T *() const
Оператор преобразования; реализует семантику указателя. Благодаря этой функции вы можете передать QPointer<T> в функцию, где требуется T*.
T &QPointer::operator*() const
Оператор разыменования; реализует семантику указателя. Используйте этот оператор так же, как и с обычным указателем C++.
T *QPointer::operator->() const
Перегруженный оператор стрелки; реализует семантику указателя. Используйте этот оператор так же, как и с обычным указателем C++.
QPointer<T> &QPointer::operator=(T *p)
Оператор присваивания. Этот защищенный указатель теперь будет указывать на тот же объект, что и p.
Связанные нечлены
bool operator!=(const T *o, const QPointer<T> &p)
Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.
bool operator!=(const QPointer<T> &p, const T *o)
Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.
bool operator!=(T *o, const QPointer<T> &p)
Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.
bool operator!=(const QPointer<T> &p, T *o)
Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.
bool operator!=(const QPointer<T> &p1, const QPointer<T> &p2)
Оператор неравенства. Возвращает true если защищённые указатели p1 и p2 не указывают на один и тот же объект, в противном случае возвращает false.
bool operator==(const T *o, const QPointer<T> &p)
Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.
bool operator==(const QPointer<T> &p, const T *o)
Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.
bool operator==(T *o, const QPointer<T> &p)
Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.
bool operator==(const QPointer<T> &p, T *o)
Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.
bool operator==(const QPointer<T> &p1, const QPointer<T> &p2)
Оператор равенства. Возвращает true если защищённые указатели p1 и p2 указывают на один и тот же объект, в противном случае возвращает false.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qpointer.html