Класс 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