QEnableSharedFromThis 类

template <typename T> class QEnableSharedFromThis

一个基类,允许从由智能指针管理的对象中获得一个 QSharedPointer更多...

头文件 #include <QEnableSharedFromThis>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共函数

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

详细描述

当您需要从一个类的任何实例创建一个 QSharedPointer 时,可以继承这个类;例如,在对象内部。关键点是,直接返回 QSharedPointer<T>(this) 的技术不能使用,因为这会导致创建多个不同的 QSharedPointer 对象,它们各自有独立的引用计数。因此,您绝对不能从同一个原始指针创建多个 QSharedPointer

QEnableSharedFromThis 定义了两个名为 sharedFromThis() 的成员函数,根据 const 性返回一个 QSharedPointerQSharedPointer<const T>

    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> ...
        }
    };

成员函数文档

QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()

如果 this(即调用此方法的子类实例)正被一个 QSharedPointer 管理,则返回指向 this 的智能指针实例;否则返回一个空 QSharedPointer

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

这是一个重载函数。

sharedFromThis() 的 const 重载。

© 2024 Qt 公司版权所有。此处包含的文档贡献的版权归各自所有者所有。此处提供的文档是在自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款下授权的。Qt 及相关商标是芬兰 Qt 公司和/或在其他世界各地的商标。所有其他商标均为各自所有者的财产。