Разница между QSharedPointer и QSharedDataPointer?

В чем разница между этими двумя типами указателей? Насколько я могу прочитать, QSharedPointer может хорошо справиться с ситуацией, так зачем же нужен QSharedDataPointer?

1 ответ

Решение

Из документации Qt QSharedDataPointer

Класс QSharedDataPointer представляет указатель на неявно разделяемый объект. QSharedDataPointer облегчает написание ваших собственных неявно разделяемых классов. QSharedDataPointer реализует поточно-ориентированный подсчет ссылок, гарантируя, что добавление QSharedDataPointers в ваши повторно входящие классы не сделает их не входящими. Неявное совместное использование используется многими классами Qt для объединения скорости и эффективности использования памяти указателями с простотой использования классов. Смотрите страницу Shared Classes для получения дополнительной информации.

Пример использования -

 #include <QSharedData>
 #include <QString>

 class EmployeeData : public QSharedData
 {
   public:
     EmployeeData() : id(-1) { }
     EmployeeData(const EmployeeData &other)
         : QSharedData(other), id(other.id), name(other.name) { }
     ~EmployeeData() { }

Для QSharedPointer

Класс QSharedPointer содержит строгую ссылку на общий указатель. QSharedPointer - это автоматический общий указатель в C++. Он ведет себя точно так же, как обычный указатель для обычных целей, включая уважение к константности. QSharedPointer удалит указатель, который он удерживает, когда он выходит из области видимости, при условии, что другие объекты QSharedPointer не ссылаются на него.

>  QSharedPointer<MyObject> obj =
>          QSharedPointer<MyObject>(new MyObject);

Итак, QSharedDataPointer используется для создания неявно разделяемых классов. Принимая во внимание, что QSharedPointer является интеллектуальным указателем подсчета ссылок, который указывает на классы.


РЕДАКТИРОВАТЬ

При чтении управления памятью в Qt? Я нашел эту ссылку http://blog.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/. Действительно отличное обсуждение различных умных указателей в Qt (в текущем API их 8).

Другие вопросы по тегам