Разница между QSharedPointer и QSharedDataPointer? - PullRequest
13 голосов
/ 07 октября 2010

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

1 Ответ

6 голосов
/ 07 октября 2010

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

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

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

 #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 - это интеллектуальный указатель для подсчета ссылок, который указывает на классы.


EDIT

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

...