Ответ
QSharedPointer — это умный указатель с подсчётом ссылок, предоставляемый фреймворком Qt для автоматического управления временем жизни динамически созданных объектов C++.
Ключевые особенности:
- Автоматическое удаление: Объект уничтожается, когда последний
QSharedPointer, владеющий им, выходит из области видимости или сбрасывается. - Потокобезопасность: Атомарный счётчик ссылок делает основные операции (
operator=,reset()) безопасными для использования из разных потоков. - Кастомные делитеры: Можно задать функцию удаления, например, для использования с массивами (
QScopedPointerArrayDeleter) или другими ресурсами. - Совместимость с
QWeakPointer: Для разрыва циклических ссылокQSharedPointerможно преобразовать вQWeakPointer, который не увеличивает счётчик владения.
Пример использования:
#include <QSharedPointer>
#include <QObject>
// Создание shared pointer'а
QSharedPointer<QObject> objPtr(new QObject());
// Копирование увеличивает счётчик ссылок
QSharedPointer<QObject> anotherPtr = objPtr; // Счётчик = 2
// Сброс одного указателя уменьшает счётчик
anotherPtr.clear(); // Счётчик = 1
// При разрушении objPtr (здесь — при выходе из области видимости)
// счётчик становится 0, и объект QObject удаляется.
Альтернативы в Qt: Для исключительного (единоличного) владения объектом в области видимости используется QScopedPointer. Для наблюдения за объектом, управляемым QSharedPointer, без продления его жизни — QWeakPointer.