Die implizite Freigabe ist ein interessantes Feature von Qt-Wert-Container-Klassen, also benutzerdefinierte implizit gemeinsam genutzte Klassen wäre eine große Leistung und Speicherauslastung, ich bin herauszufinden, wie Sie es implementieren.Implizite Freigabe für benutzerdefinierte Klassen in Qt
Für eine benutzerdefinierte Klasse einige POD Mitglieder und Qt Wertart Mitglieder der implizite gemeinsame Nutzung für jedes Mitglied würde automatisch zur Verfügung enthält, die einen Qt Werttypen wie QString, QByteArray und ...
Bei diesem Ansatz Das Problem ist, dass jedes Mitglied seine spezifische sharedPtr- und Referenzzahl hat, für ein großes Objekt mit mehr als 50 implizit geteilten Mitgliedern, es ist ein Leistungsverlust, um die Referenzzahl jedes Objekts unabhängig zu überprüfen (zum Ablösen) Aus meiner Sicht Daher ist es besser, das gesamte Objekt implizit zu teilen, wodurch der gesamte Speicherverbrauch und die für gemeinsame Klassen benötigten Operationen reduziert werden.
Von COW (Copy on Write) Sicht ist dieser Ansatz besser, weil die Kuh auf kleinere Granularität durchgeführt werden, wie auch immer lesen für nur Objekte es nicht viel wert
Q1 tut: kann mir jemand den Nachteil und Vorteile implizit benutzerdefinierte Klasse, die große Anzahl von Mitgliedern (> 50) teilen von
Q2 erklären: Soweit ich weiß, die implizit geteilt Klasse profitiert von Shared Klasse innerhalb Qt-Namespace , so ist es möglich, eine Gewohnheit zu haben implizit geteilte Klasse überhaupt? Was ist mit Membern von Qt in der benutzerdefinierten Klasse? Ich meine nicht bewegen Semantik von C++ 11, die bereits bekannt ist, die Qt ist stärker
Danke, ich bemerkte die Verschiebung Semantik im Gegensatz zu keiner tiefen Kopie in implizit freigegebenen Klassen Wie kann ich verschiedene Klassenmitglieder in einem von QSharedData gegebenen rohen Zeiger kapseln? es ist nicht gut dokumentiert –
Sie haben ein vollständiges Beispiel in 'QSharedDataPointer' Dokumentation: http://doc.qt.io/qt-5/qshareddatapointer.html#details –