Разница между qsharedpointer и qshareddatapointer?
-
28-09-2019 - |
Вопрос
В чем разница между этими двумя типами указателей? Насколько я могу прочитать, qharedpointer может хорошо справиться с ситуацией, так что такое необходимость в qshareddatapointer?
Решение
От QT документацииQshareddatapointer.
Класс QSharedDatapointer представляет указатель на неявный общий объект. QSharedDatapointer облегчает писать свои собственные неявные классы. QSharedDatapointer реализует безопасную резьбовую ссылку, подсчитав, что обеспечивает добавление QSharedDatapointers к вашим классам Reentrant, не сделает их нерентарными. Неявный обмен используется множеством классов 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 будет удалять указатель, который он удерживает, когда он выходит из приспособления, при условии, что никаких других объектов QSharedPoine не ссылается на него.
> 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).