Spec-Zone.ru › Qt 6.1

Класс QEnableSharedFromThis

шаблон <typename T> класс QEnableSharedFromThis

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

Заголовок: #include <QEnableSharedFromThis>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С момента: Qt 5.4
  • Список всех членов, включая унаследованные

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

QSharedPointer<T> sharedFromThis()
QSharedPointer<const T> sharedFromThis() const

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

Вы можете унаследовать от этого класса, когда вам нужно создать QSharedPointer из любого экземпляра класса; например, внутри самого объекта. Суть в том, что метод простого возвращения QSharedPointer<T>(this) использовать нельзя, поскольку это приводит к созданию нескольких отдельных объектов QSharedPointer с отдельными счётчиками ссылок. По этой причине вы никогда не должны создавать более одного QSharedPointer из одного и того же сырого указателя.

QEnableSharedFromThis определяет две функции-члена с именем sharedFromThis(), которые возвращают QSharedPointer<T> и QSharedPointer<const T>, в зависимости от константности, для this:

    class Y: public QEnableSharedFromThis<Y>
    {
    public:
        QSharedPointer<Y> f()
        {
            return sharedFromThis();
        }
    };

    int main()
    {
        QSharedPointer<Y> p(new Y());
        QSharedPointer<Y> y = p->f();
        Q_ASSERT(p == y); // p and q must share ownership
    }

Также можно получить общий указатель из объекта вне класса. Это особенно полезно в коде, предоставляющем интерфейс для скриптов, где в настоящее время нельзя использовать общие указатели. Например:

    class ScriptInterface : public QObject
    {
        Q_OBJECT

        // ...

    public slots:
        void slotCalledByScript(Y *managedBySharedPointer)
        {
            QSharedPointer<Y> yPtr = managedBySharedPointer->sharedFromThis();
            // Some other code unrelated to scripts that expects a QSharedPointer<Y> ...
        }
    };

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

[since 5.4] QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()

Если this (то есть экземпляр подкласса, вызывающий этот метод) управляется QSharedPointer, возвращает экземпляр общего указателя, указывающий на this; в противном случае возвращает нулевой QSharedPointer.

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

[since 5.4] QSharedPointer<const T> QEnableSharedFromThis::sharedFromThis() const

Это перегруженная функция.

Перегрузка sharedFromThis() с const.

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

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

Spec-Zone.ru

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