QCache Class
template <typename Key, typename T> class QCacheDie Klasse „QCache“ ist eine Template-Klasse, die einen Cache bereitstellt. Mehr...
| Header: | #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 gehört zu den implizit gemeinsam genutzten Klassen.
Hinweis: Alle Funktionen 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 |
Ausführliche 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 beispielsweise die Definition eines Caches, der Objekte vom Typ „Employee“ speichert, die mit einem ganzzahligen Schlüssel verknüpft sind:
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 anderen schlüsselbasierten Datenstrukturen (wie z. B. „ QMap “ oder „ QHash “) besteht darin, dass QCache automatisch die Verantwortung für die in den Cache eingefügten Objekte übernimmt und diese bei Bedarf löscht, um Platz für neue Objekte zu schaffen. Beim Einfügen eines Objekts in den Cache können Sie Kosten angeben, die in etwa dem Speicherbedarf des Objekts entsprechen sollten. Wenn die Summe der Kosten aller Objekte (totalCost()) das Limit des Caches (maxCost()) überschreitet, beginnt QCache damit, Objekte aus dem Cache zu löschen, um das Limit nicht zu überschreiten, wobei mit den Objekten begonnen wird, auf die zuletzt zugegriffen wurde.
Standardmäßig ist der Wert von „ maxCost()“ in QCache auf 100 gesetzt. Sie können im QCache-Konstruktor einen anderen Wert angeben:
QCache<int, MyDataStructure> cache(5000);Bei jedem Aufruf von ` insert()` können Sie als drittes Argument (nach dem Schlüssel und einem Zeiger auf das einzufügende Objekt) einen Kostenwert angeben. Nach dem Aufruf gehört das eingefügte Objekt dem QCache, der es jederzeit löschen kann, um Platz für andere Objekte zu schaffen.
Um Objekte im Cache nachzuschlagen, verwenden Sie ` object()` oder den Operator `[]()`. Diese Funktion sucht ein Objekt anhand seines Schlüssels und gibt entweder einen Zeiger auf das im Cache gespeicherte Objekt (das sich im Besitz des Caches befindet) oder ` nullptr` zurück.
Wenn Sie ein Objekt mit einem bestimmten Schlüssel aus dem Cache entfernen möchten, rufen Sie ` remove()` auf. Dadurch wird das Objekt ebenfalls gelöscht. Wenn Sie ein Objekt aus dem Cache entfernen möchten, ohne dass der QCache es löscht, verwenden Sie ` take()`.
Siehe auch QPixmapCache, QHash und QMap.
Dokumentation zu den Member-Funktionen
[explicit noexcept] QCache::QCache(qsizetype maxCost = 100)
Erstellt einen Cache, dessen Inhalt niemals Gesamtkosten von mehr als maxCost verursachen wird.
QCache::~QCache()
Löscht 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> “ auf „ true “ gesetzt 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
Entspricht „ 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 gehört „ object “ zu „ QCache “ und kann jederzeit gelöscht werden. Insbesondere wird das Objekt sofort gelöscht, wenn „ cost “ größer ist als „ maxCost()“.
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 gibt er „ false “ zurück.
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 “, falls der Schlüssel im Cache nicht vorhanden ist.
Warnung: Das zurückgegebene Objekt gehört QCache und kann jederzeit gelöscht werden.
Siehe auch take() und remove().
[noexcept(...)] bool QCache::remove(const Key &key)
Löscht das Objekt, das dem Schlüssel „ key “ zugeordnet ist. 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> ` gleich ` true` ist.
Siehe auch „ take()“ und „ clear()“.
[noexcept(...)] void QCache::setMaxCost(qsizetype cost)
Legt die maximal zulässigen Gesamtkosten des Caches auf cost fest. Sind die aktuellen Gesamtkosten größer als cost, 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 “ verknüpfte Objekt aus dem Cache, ohne es zu löschen. Gibt einen Zeiger auf das entnommene Objekt zurück oder 0, falls der Schlüssel im Cache nicht vorhanden ist.
Die Eigentumsrechte am zurückgegebenen Objekt werden an den Aufrufer übertragen.
Hinweis: Diese Funktion ist „noexcept“, wenn „ std::is_nothrow_destructible_v<Key> “ den Wert „ true “ hat.
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 bildet eine Ausnahme für die implizit gemeinsam genutzten Klassen von Qt. Wenn ein im Cache gespeichertes Objekt seine internen Daten mit einer anderen Instanz teilt, kann QCache das Objekt möglicherweise im Speicher belassen, was dazu führen kann, dass totalCost() größer ist als maxCost().
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 “, falls der Schlüssel im Cache nicht vorhanden ist.
Dies entspricht der Funktion „ object()“.
Warnung: Das zurückgegebene Objekt gehört QCache und kann jederzeit gelöscht werden.
© 2026 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.