Spec-Zone.ru › Qt 5.6

Класс QExplicitlySharedDataPointer

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

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

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

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

typedef Type

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

QExplicitlySharedDataPointer()
QExplicitlySharedDataPointer(T *sharedData)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &other)
QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &other)
QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o)
~QExplicitlySharedDataPointer()
const T * constData() const
T * data() const
void detach()
void reset()
void swap(QExplicitlySharedDataPointer &other)
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> &other)
QExplicitlySharedDataPointer & operator=(T *sharedData)
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() доступна, но если вам действительно нужно отсоединиться, вы должны вызвать её самостоятельно. Это означает, что QExplicitlySharedDataPointers ведут себя как обычные указатели C++, за исключением того, что подсчёт ссылок и удаление общей области памяти до тех пор, пока счётчик ссылок не станет равным 0, позволяет избежать проблемы с висячими указателями.

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

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

В документации к членам функции d pointer всегда относится к внутреннему указателю на общую область памяти.

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

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

typedef QExplicitlySharedDataPointer::Type

Это тип объекта общей области памяти. d pointer указывает на объект этого типа.

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

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()

Создаёт QExplicitlySharedDataPointer, инициализированный нулевым d pointer.

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T *sharedData)

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

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

Этот стандартный конструктор копирования устанавливает d pointer текущего объекта в d pointer объекта other и увеличивает счётчик ссылок на общий объект данных.

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

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

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

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

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

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

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

QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o)

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

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

QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()

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

[protected] T *QExplicitlySharedDataPointer::clone()

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

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

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

const T *QExplicitlySharedDataPointer::constData() const

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

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

T *QExplicitlySharedDataPointer::data() const

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

void QExplicitlySharedDataPointer::detach()

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

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

void QExplicitlySharedDataPointer::reset()

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

void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer &other)

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

QExplicitlySharedDataPointer::operator bool() const

Возвращает true если указатель d для этого не равен null.

bool QExplicitlySharedDataPointer::operator!() const

Возвращает true если указатель d для этого равен null.

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

Возвращает true если other и этот не имеют одинаковый указатель d.

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

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

T &QExplicitlySharedDataPointer::operator*() const

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

T *QExplicitlySharedDataPointer::operator->()

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

T *QExplicitlySharedDataPointer::operator->() const

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

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

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

QExplicitlySharedDataPointer &QExplicitlySharedDataPointer::operator=(T *sharedData)

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

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

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

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

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

Возвращает true если other и этот имеют одинаковый указатель d.

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

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

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

Spec-Zone.ru

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