Spec-Zone.ru › Qt 5.9

Класс 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
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> &other)
QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &other)
QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &other)
QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &other)
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().

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> &other)

Возвращает указатель на общий ресурс, ссылающийся на указатель, хранимый в other, приведённый к типу X. Типы T и X должны принадлежать к одной иерархии для успешного выполнения const_cast. Различия в const и volatile между T и X игнорируются.

Объект other сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который указывает ссылка, уже удалён), функция возвращает нулевой QSharedPointer.

См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerDynamicCast().

QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &other)

Возвращает указатель на общий ресурс, ссылающийся на указатель, хранимый в other, используя динамическое приведение к типу X для получения внутреннего указателя соответствующего типа. Если динамическое приведение не удаётся, возвращаемый объект будет нулевым.

Объект other сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который указывает ссылка, уже удалён), функция также возвращает нулевой QSharedPointer.

Обратите внимание, что X должен иметь те же квалификаторы cv (const и volatile), что и T, в противном случае код не будет компилироваться. Используйте qSharedPointerConstCast для удаления константности.

См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerConstCast().

QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &other)

Функция qSharedPointerObjectCast предназначена для приведения указателя на общий ресурс.

Возвращает указатель на общий ресурс, ссылающийся на указатель, хранимый в other, используя qobject_cast() к типу X для получения внутреннего указателя соответствующего типа. Если приведение не удаётся, возвращаемый объект будет нулевым.

Объект other сначала преобразуется в сильную ссылку. Если это преобразование не удаётся (потому что объект, на который указывает ссылка, уже удалён), функция также возвращает нулевой QSharedPointer.

Обратите внимание, что X должен иметь те же квалификаторы cv (const и volatile), что и T, в противном случае код не будет компилироваться. Используйте qSharedPointerConstCast для удаления константности.

Эта функция была введена в Qt 4.6.

См. также QWeakPointer::toStrongRef(), qSharedPointerCast() и qSharedPointerConstCast().

QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &other)

Возвращает слабый указатель на указатель, хранимый в other, приведённый к типу 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.9/qweakpointer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API