Spec-Zone.ru › Qt 5.11

Класс QExplicitlySharedDataPointer

Класс QExplicitlySharedDataPointer представляет указатель на явным образом разделяемый объект. Подробнее...

Заголовок: #include <QExplicitlySharedDataPointer>
qmake: QT += core
С момента: Qt 4.4
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются внутрипоточными.

Открытые типы

typedef Type

Открытые функции

QExplicitlySharedDataPointer()
QExplicitlySharedDataPointer(T *data)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)
QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)
~QExplicitlySharedDataPointer()
const T * constData() const
T * data() const
void detach()
void reset()
void swap(QExplicitlySharedDataPointer<T> &other)
bool operator bool() const
bool operator!() const
bool operator!=(const QExplicitlySharedDataPointer<T> &other) const
bool operator!=(const T *ptr) const
T & operator*() const
T * operator->()
T * operator->() const
QExplicitlySharedDataPointer<T> & operator=(const QExplicitlySharedDataPointer<T> &o)
QExplicitlySharedDataPointer<T> & operator=(T *o)
QExplicitlySharedDataPointer<T> & operator=(QExplicitlySharedDataPointer<T> &&other)
bool operator==(const QExplicitlySharedDataPointer<T> &other) const
bool operator==(const T *ptr) const

Защищенные функции

T * clone()

Подробное описание

Класс QExplicitlySharedDataPointer представляет указатель на явным образом разделяемый объект.

QExplicitlySharedDataPointer<T> облегчает создание собственных классов с явным разделяемым объектом. QExplicitlySharedDataPointer реализует безопасную многопоточность подсчета ссылок, гарантируя, что добавление QExplicitlySharedDataPointers к вашим внутрипоточным классам не сделает их не внутрипоточными.

За исключением одного существенного отличия, QExplicitlySharedDataPointer аналогичен QSharedDataPointer. Главное отличие заключается в том, что члены QExplicitlySharedDataPointer не выполняют автоматическое копирование при записи (detach()), которое выполняются неконстантные члены QSharedDataPointer, прежде чем разрешить изменение разделяемого объекта данных. Функция detach() доступна, но если вам действительно нужно вызвать detach(), вы должны вызвать ее самостоятельно. Это означает, что QExplicitlySharedDataPointer ведут себя как обычные указатели C++, за исключением того, что, выполняя подсчет ссылок и не удаляя разделяемый объект данных до тех пор, пока счетчик ссылок не станет равным 0, они избегают проблемы с висячими указателями.

Полезно сравнить QExplicitlySharedDataPointer с QSharedDataPointer на примере. Рассмотрим пример Employee в QSharedDataPointer, измененный для использования явного разделения, как описано в обсуждении Неявное и явное разделение.

Обратите внимание, что если вы используете этот класс, но обнаруживаете, что часто вызываете detach(), вероятно, вам следует использовать QSharedDataPointer вместо этого.

В документации к членам функции d указатель всегда относится к внутреннему указателю на разделяемый объект данных.

См. также QSharedData и QSharedDataPointer.

Документация по типу члена

typedef QExplicitlySharedDataPointer::Type

Это тип разделяемого объекта данных. d указатель указывает на объект этого типа.

Документация по функциям-членам

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()

Создает QExplicitlySharedDataPointer с нулевым d указателем.

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T *data)

Создает QExplicitlySharedDataPointer с d указателем, установленным на data, и увеличивает счетчик ссылок data.

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o)

Этот стандартный конструктор копирования устанавливает d указатель этого объекта на d указатель в o и увеличивает счетчик ссылок разделяемого объекта данных.

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o)

Этот конструктор копирования отличается тем, что позволяет o быть указателем на явным образом разделяемый объект другого типа, но с совместимым объектом разделяемых данных.

По умолчанию d указатель o (типа X *) неявно преобразуется в тип T *; результат этого преобразования устанавливается как d указатель этого объекта, и счетчик ссылок разделяемого объекта данных увеличивается.

Однако, если макрос QT_ENABLE_QEXPLICITLYSHAREDDATAPOINTER_STATICCAST определен перед включением заголовка QExplicitlySharedDataPointer, то d указатель o претерпевает static_cast в тип T *. Результат приведения типа затем устанавливается как d указатель этого объекта, и счетчик ссылок разделяемого объекта данных увеличивается.

Предупреждение: зависимость от таких static_cast потенциально опасна, потому что позволяет компилировать такой код:

QExplicitlySharedDataPointer<Base> base(new Base);
QExplicitlySharedDataPointer<Derived> derived(base); // !!! DANGER !!!

Начиная с Qt 5.4, преобразование отключено по умолчанию. Его можно снова включить, определив макрос QT_ENABLE_QEXPLICITLYSHAREDDATAPOINTER_STATICCAST, и, следовательно, позволить старому коду (который полагался на эту функцию) компилироваться без изменений.

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer<T> &&o)

Перемещающее создание экземпляра QExplicitlySharedDataPointer, делая его указывающим на тот же объект, на который указывал o.

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

QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()

Уменьшает счётчик ссылок объекта совместно используемых данных. Если счётчик ссылок становится равным 0, объект совместно используемых данных удаляется. Затем уничтожается this.

[protected] T *QExplicitlySharedDataPointer::clone()

Создаёт и возвращает глубокую копию текущих данных. Эта функция вызывается функцией detach() при счётчике ссылок больше 1, чтобы создать новую копию. Эта функция использует operator new и вызывает конструктор копирования типа T.

См. QSharedDataPointer<T>::clone() для объяснения, как его использовать.

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

const T *QExplicitlySharedDataPointer::constData() const

Возвращает указатель константы на объект совместно используемых данных.

См. также data().

T *QExplicitlySharedDataPointer::data() const

Возвращает указатель на объект совместно используемых данных.

void QExplicitlySharedDataPointer::detach()

Если счётчик ссылок объекта совместно используемых данных больше 1, эта функция создаёт глубокую копию объекта совместно используемых данных и устанавливает d указатель this на копию.

Поскольку QExplicitlySharedDataPointer не выполняет автоматические операции copy on write, которые выполняют члены QSharedDataPointer, detach() не вызывается автоматически нигде в функциях-членах этого класса. Если вы обнаруживаете, что вызываете detach() повсюду в своём коде, рассмотрите использование QSharedDataPointer вместо этого.

void QExplicitlySharedDataPointer::reset()

Сбрасывает this в нулевое значение. То есть, эта функция устанавливает d указатель this в 0, но сначала уменьшает счётчик ссылок объекта совместно используемых данных и удаляет объект совместно используемых данных, если счётчик ссылок стал 0.

void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer<T> &other)

Меняет местами явный указатель на совместно используемые данные этого экземпляра с явным указателем на совместно используемые данные в other.

bool QExplicitlySharedDataPointer::operator bool() const

Возвращает true если d указатель this не равен нулю.

bool QExplicitlySharedDataPointer::operator!() const

Возвращает true если d указатель this равен нулю.

bool QExplicitlySharedDataPointer::operator!=(const QExplicitlySharedDataPointer<T> &other) const

Возвращает true если other и this не имеют одинакового d указателя.

bool QExplicitlySharedDataPointer::operator!=(const T *ptr) const

Возвращает true если d указатель this не равен ptr.

T &QExplicitlySharedDataPointer::operator*() const

Обеспечивает доступ к членам объекта совместно используемых данных.

T *QExplicitlySharedDataPointer::operator->()

Обеспечивает доступ к членам объекта совместно используемых данных.

T *QExplicitlySharedDataPointer::operator->() const

Обеспечивает доступ с константой к членам объекта совместно используемых данных.

QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T> &o)

Устанавливает d указатель this в d указатель o и увеличивает счётчик ссылок объекта совместно используемых данных. Счётчик ссылок старого объекта совместно используемых данных this уменьшается. Если счётчик ссылок старого объекта совместно используемых данных становится 0, старый объект совместно используемых данных удаляется.

QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(T *o)

Устанавливает d указатель this в o и увеличивает счётчик ссылок o. Счётчик ссылок старого объекта совместно используемых данных this уменьшается. Если счётчик ссылок старого объекта совместно используемых данных становится 0, старый объект совместно используемых данных удаляется.

QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(QExplicitlySharedDataPointer<T> &&other)

Перемещающее присваивание other этому экземпляру QExplicitlySharedDataPointer.

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

bool QExplicitlySharedDataPointer::operator==(const QExplicitlySharedDataPointer<T> &other) const

Возвращает true если other и this имеют тот же d указатель.

bool QExplicitlySharedDataPointer::operator==(const T *ptr) const

Возвращает true если d указатель this равен ptr.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qexplicitlyshareddatapointer.html

Spec-Zone.ru

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