QCache Class

template <typename Key, typename T> class QCache

Die 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

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.