Der Unterschied zwischen QSharedPointer und QSharedDataPointer?
-
28-09-2019 - |
Frage
Was ist der Unterschied zwischen diesen beiden Arten von Zeigern? Soweit ich lesen kann, QSharedPointer Situation gut umgehen kann, also was ist die Notwendigkeit für QSharedDataPointer?
Lösung
Von Qt-Dokumentation QSharedDataPointer
Die QSharedDataPointer Klasse stellt einen Zeiger auf eine implizit gemeinsames Objekt. QSharedDataPointer macht Ihre eigene implizit schreiben gemeinsam genutzten Klassen einfach. QSharedDataPointer Geräte threadsicher Referenzzählung, sichergestellt wird, dass die Zugabe QSharedDataPointers zu Ihrem einspringenden Klassen werden sie nicht nichtablaufinvarianten machen. Implizite Sharing wird von vielen Qt verwendet Klassen, die Geschwindigkeit zu kombinieren und Speichereffizienz von Zeigern mit der Benutzerfreundlichkeit von Klassen. Siehe die Geteilt Klassen-Seite für weitere Informationen.
Beispiel für die Verwendung -
#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() { }
Die QSharedPointer Klasse hält ein starker Bezug auf einen gemeinsamen Zeiger Die QSharedPointer ist eine automatische, Shared-Zeiger in C ++. es verhält sich genau wie ein normaler Zeiger für normale Zwecke, insbesondere zur Wahrung Konstantheit. QSharedPointer löscht der Zeiger es hält, wenn es geht out of scope, sofern keine andere QSharedPointer Objekte verweisen es.
> QSharedPointer<MyObject> obj =
> QSharedPointer<MyObject>(new MyObject);
So wird der QSharedDataPointer verwendet implicititly gemeinsame Klassen machen zu schaffen. Während QSharedPointer ist ein Referenzzählung Zeiger intelligenten, dass Punkte auf Klassen.
Bearbeiten
Wenn Speicherverwaltung in Qt zu lesen? , fand ich diesen Link http: //blog.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/ . Eine wirklich ausgezeichnete Diskussion der verschiedenen Smart-Pointer Qt hat (aktuelle API hat 8).