Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Из документации 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 - это автоматический, общий указатель в С++. Он ведет себя точно как обычный указатель для нормальных целях, включая константность. QSharedPointer удалит указатель, который он удерживает, когда он идет вне сферы охвата, при условии, что никакой другой Объекты QSharedPointer ссылаются он.

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

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


ИЗМЕНИТЬ

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