QCache Class
template <typename Key, typename T> class QCacheDie QCache-Klasse ist eine Vorlagenklasse, die einen Cache bereitstellt. Mehr...
Kopfzeile: | #include <QCache> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QCache ist Teil von Implicitly Shared Classes.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
QCache(qsizetype maxCost = 100) | |
~QCache() | |
void | clear() |
bool | contains(const Key &key) const |
qsizetype | count() const |
bool | insert(const Key &key, T *object, qsizetype cost = 1) |
bool | isEmpty() const |
QList<Key> | keys() const |
qsizetype | maxCost() const |
T * | object(const Key &key) const |
bool | remove(const Key &key) |
void | setMaxCost(qsizetype cost) |
qsizetype | size() const |
T * | take(const Key &key) |
qsizetype | totalCost() const |
T * | operator[](const Key &key) const |
Detaillierte Beschreibung
QCache<Key, T> definiert einen Cache, der Objekte vom Typ T speichert, die mit Schlüsseln vom Typ Key verknüpft sind. Hier ist zum Beispiel die Definition eines Caches, der Objekte vom Typ Employee in Verbindung mit einem Integer-Schlüssel speichert:
QCache<int, Employee> cache;
So fügen Sie ein Objekt in den Cache ein:
Employee *employee = new Employee; employee->setId(37); employee->setName("Richard Schmit"); ... cache.insert(employee->id(), employee);
Der Vorteil der Verwendung von QCache gegenüber einer anderen schlüsselbasierten Datenstruktur (wie QMap oder QHash) besteht darin, dass QCache automatisch das Eigentum an den Objekten übernimmt, die in den Cache eingefügt werden, und sie gegebenenfalls löscht, um Platz für neue Objekte zu schaffen. Wenn Sie ein Objekt in den Cache einfügen, können Sie die Kosten angeben, die in einem ungefähren Verhältnis zum Speicherbedarf des Objekts stehen sollten. Wenn die Summe der Kosten aller Objekte (totalCost()) das Cache-Limit (maxCost()) überschreitet, beginnt QCache mit dem Löschen von Objekten im Cache, um unter dem Limit zu bleiben, beginnend mit den Objekten, auf die zuletzt zugegriffen wurde.
Standardmäßig hat QCache maxCost() den Wert 100. Sie können im QCache-Konstruktor einen anderen Wert angeben:
QCache<int, MyDataStructure> cache(5000);
Jedes Mal, wenn Sie insert() aufrufen, können Sie als drittes Argument (nach dem Schlüssel und einem Zeiger auf das einzufügende Objekt) die Kosten angeben. Nach dem Aufruf ist das eingefügte Objekt Eigentum des QCache, der es jederzeit löschen kann, um Platz für andere Objekte zu schaffen.
Um Objekte im Cache zu suchen, verwenden Sie object() oder operator[](). Diese Funktion sucht ein Objekt anhand seines Schlüssels und gibt entweder einen Zeiger auf das zwischengespeicherte Objekt (das im Besitz des Caches ist) oder nullptr
zurück.
Wenn Sie ein Objekt für einen bestimmten Schlüssel aus dem Cache entfernen wollen, rufen Sie remove() auf. Dadurch wird das Objekt ebenfalls gelöscht. Wenn Sie ein Objekt aus dem Cache entfernen wollen, ohne dass der QCache es löscht, verwenden Sie take().
Siehe auch QPixmapCache, QHash, und QMap.
Dokumentation der Mitgliedsfunktionen
[explicit noexcept]
QCache::QCache(qsizetype maxCost = 100)
Konstruiert einen Cache, dessen Inhalt nie mehr als maxCost kosten wird.
QCache::~QCache()
Zerstört den Cache. Löscht alle Objekte im Cache.
[noexcept(...)]
void QCache::clear()
Löscht alle Objekte im Cache.
Hinweis: Diese Funktion ist noexcept, wenn std::is_nothrow_destructible_v<Node>
true
ist.
Siehe auch remove() und take().
[noexcept]
bool QCache::contains(const Key &key) const
Gibt true
zurück, wenn der Cache ein Objekt enthält, das dem Schlüssel key zugeordnet ist; andernfalls wird false
zurückgegeben.
Siehe auch take() und remove().
[noexcept]
qsizetype QCache::count() const
Dasselbe wie size().
bool QCache::insert(const Key &key, T *object, qsizetype cost = 1)
Fügt object mit dem Schlüssel key und den zugehörigen Kosten cost in den Cache ein. Jedes Objekt mit demselben Schlüssel, das sich bereits im Cache befindet, wird entfernt.
Nach diesem Aufruf befindet sich object im Besitz von QCache und kann jederzeit gelöscht werden. Insbesondere, wenn cost größer ist als maxCost(), wird das Objekt sofort gelöscht.
Die Funktion gibt true
zurück, wenn das Objekt in den Cache eingefügt wurde; andernfalls gibt sie false
zurück.
Siehe auch take() und remove().
[noexcept]
bool QCache::isEmpty() const
Gibt true
zurück, wenn der Cache keine Objekte enthält; andernfalls wird false
zurückgegeben.
Siehe auch size().
QList<Key> QCache::keys() const
Gibt eine Liste der Schlüssel im Cache zurück.
[noexcept]
qsizetype QCache::maxCost() const
Gibt die maximal zulässigen Gesamtkosten des Caches zurück.
Siehe auch setMaxCost() und totalCost().
[noexcept]
T *QCache::object(const Key &key) const
Gibt das Objekt zurück, das dem Schlüssel key zugeordnet ist, oder nullptr
, wenn der Schlüssel nicht im Cache vorhanden ist.
Warnung: Das zurückgegebene Objekt ist Eigentum von QCache und kann jederzeit gelöscht werden.
Siehe auch take() und remove().
[noexcept(...)]
bool QCache::remove(const Key &key)
Löscht das mit dem Schlüssel key verbundene Objekt. Gibt true
zurück, wenn das Objekt im Cache gefunden wurde; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion ist noexcept, wenn std::is_nothrow_destructible_v<Node>
true
ist.
Siehe auch take() und clear().
[noexcept(...)]
void QCache::setMaxCost(qsizetype cost)
Setzt die maximal zulässigen Gesamtkosten des Caches auf cost. Wenn die aktuellen Gesamtkosten größer als cost sind, werden einige Objekte sofort gelöscht.
Hinweis: Diese Funktion ist noexcept, wenn std::is_nothrow_destructible_v<Node>
gleich true
ist.
Siehe auch maxCost() und totalCost().
[noexcept]
qsizetype QCache::size() const
Gibt die Anzahl der Objekte im Cache zurück.
Siehe auch isEmpty().
[noexcept(...)]
T *QCache::take(const Key &key)
Entnimmt das mit dem Schlüssel key verbundene Objekt aus dem Cache, ohne es zu löschen. Gibt einen Zeiger auf das entnommene Objekt zurück oder 0, wenn der Schlüssel nicht im Cache vorhanden ist.
Der Besitz des zurückgegebenen Objekts wird an den Aufrufer übergeben.
Hinweis: Diese Funktion ist noexcept, wenn std::is_nothrow_destructible_v<Key>
true
ist.
Siehe auch remove().
[noexcept]
qsizetype QCache::totalCost() const
Gibt die Gesamtkosten der Objekte im Cache zurück.
Dieser Wert liegt normalerweise unter maxCost(), aber QCache macht eine Ausnahme für die implizit gemeinsam genutzten Klassen von Qt. Wenn ein gecachtes Objekt seine internen Daten mit einer anderen Instanz teilt, kann QCache das Objekt herumliegen lassen, was möglicherweise dazu beiträgt, dass totalCost() größer als maxCost() ist.
Siehe auch setMaxCost().
[noexcept]
T *QCache::operator[](const Key &key) const
Gibt das Objekt zurück, das dem Schlüssel key zugeordnet ist, oder nullptr
, wenn der Schlüssel nicht im Cache vorhanden ist.
Dies ist dasselbe wie object().
Warnung: Das zurückgegebene Objekt ist Eigentum von QCache und kann jederzeit gelöscht werden.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.