QCache Class

template <typename Key, typename T> class QCache

QCache クラスは、キャッシュを提供するテンプレート・クラスです。詳細...

ヘッダー #include <QCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注釈このクラスの関数はすべてリエントラントです。

パブリック関数

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

詳細説明

QCache<Key, T> は、T 型のオブジェクトを Key 型のキーに関連付けて格納するキャッシュを定義します。例えば、以下は、Employee 型のオブジェクトを整数キーに関連付けて格納するキャッシュの定義です:

QCache<int, Employee> cache;

以下は、オブジェクトをキャッシュに挿入する方法です:

Employee *employee = new Employee;
employee->setId(37);
employee->setName("Richard Schmit");
...
cache.insert(employee->id(), employee);

他のキー・ベースのデータ構造 (QMapQHash など) よりも QCache を使用する利点は、キャッシュに挿入されたオブジェクトの所有権を QCache が自動的に取得し、必要に応じてそれらを削除して新しいオブジェクトのためのスペースを確保することです。オブジェクトをキャッシュに挿入するとき、コストを指定することができます。このコストは、オブジェクトが使用するメモリ量とおおよその関係があるはずです。すべてのオブジェクトのコストの合計 (totalCost()) がキャッシュの上限 (maxCost()) を超えると、QCache はキャッシュ内のオブジェクトの削除を開始し、最近アクセスされたオブジェクトから削除を開始します。

デフォルトでは、QCache のmaxCost() は 100 です。QCache コンストラクタで別の値を指定できます:

QCache<int, MyDataStructure> cache(5000);

insert() を呼び出すたびに、第 3 引数としてコストを指定できます (キーと挿入するオブジェクトへのポインタの後)。呼び出し後、挿入されたオブジェクトは QCache が所有し、QCache はいつでもそれを削除して、他のオブジェクトのための場所を確保できます。

キャッシュ内のオブジェクトを検索するには、object() または operator[]() を使用します。この関数は、キーによってオブジェクトを検索し、キャッシュされたオブジェクトへのポインタ(キャッシュが所有する)またはnullptr を返します。

特定のキーのオブジェクトをキャッシュから削除したい場合は、remove() を呼び出します。これにより、オブジェクトも削除されます。QCache でオブジェクトを削除せずにキャッシュから削除するには、take() を使用します。

QPixmapCacheQHash 、およびQMapも参照してください

メンバ関数のドキュメント

[explicit noexcept] QCache::QCache(qsizetype maxCost = 100)

コンテンツの総コストがmaxCost を超えることのないキャッシュを構築する。

QCache::~QCache()

キャッシュを破棄する。キャッシュ内のすべてのオブジェクトを削除します。

[noexcept(...)] void QCache::clear()

キャッシュ内のすべてのオブジェクトを削除する。

注意: この関数は、std::is_nothrow_destructible_v<Node>true の場合は noexcept となる。

remove() およびtake()も参照

[noexcept] bool QCache::contains(const Key &key) const

キャッシュにキーkey に関連付けられたオブジェクトが含まれている場合はtrue を返し、そうでない場合はfalse を返します。

take() およびremove()も参照

[noexcept] qsizetype QCache::count() const

size() と同じ。

bool QCache::insert(const Key &key, T *object, qsizetype cost = 1)

object を、キーkey と関連するコストcost を持つキャッシュに挿入する。すでにキャッシュにある同じキーを持つオブジェクトは削除される。

この呼び出しの後、objectQCache によって所有され、いつでも削除できる。特に、costmaxCost() より大きい場合、オブジェクトは直ちに削除される。

この関数は、オブジェクトがキャッシュに挿入された場合はtrue を返し、そうでない場合はfalse を返す。

take() およびremove()も参照

[noexcept] bool QCache::isEmpty() const

キャッシュにオブジェクトがない場合はtrue を返し、そうでない場合はfalse を返します。

size()も参照

QList<Key> QCache::keys() const

キャッシュ内のキーのリストを返します。

[noexcept] qsizetype QCache::maxCost() const

キャッシュの最大許容合計コストを返します。

setMaxCost() およびtotalCost()も参照

[noexcept] T *QCache::object(const Key &key) const

キーkey に関連付けられたオブジェクトを返します。キーがキャッシュに存在しない場合はnullptr を返します。

警告: 返されたオブジェクトはQCache が所有しており、いつでも削除できます。

take() およびremove()も参照

[noexcept(...)] bool QCache::remove(const Key &key)

キーkey に関連付けられたオブジェクトを削除する。オブジェクトがキャッシュで見つかった場合はtrue を返し、そうでない場合はfalse を返します。

注意: std::is_nothrow_destructible_v<Node>true の場合、この関数は noexcept となる。

take() およびclear()も参照

[noexcept(...)] void QCache::setMaxCost(qsizetype cost)

キャッシュの最大許容総コストをcost に設定します。 現在の総コストがcost より大きい場合、いくつかのオブジェクトは直ちに削除されます。

注意: std::is_nothrow_destructible_v<Node>true の場合、この関数は noexcept となります。

maxCost() およびtotalCost()も参照

[noexcept] qsizetype QCache::size() const

キャッシュ内のオブジェクトの数を返します。

isEmpty()も参照ください

[noexcept(...)] T *QCache::take(const Key &key)

キーkey に関連付けられたオブジェクトを、削除せずにキャッシュから取り出します。取り出されたオブジェクトへのポインタを返すか、そのキーがキャッシュに存在しない場合は 0 を返す。

返されたオブジェクトの所有権は呼び出し元に渡される。

注意: std::is_nothrow_destructible_v<Key>true の場合、この関数は noexcept となる。

remove()も参照のこと

[noexcept] qsizetype QCache::totalCost() const

キャッシュ内のオブジェクトの総コストを返します。

この値は通常maxCost() を下回りますが、QCache は Qt の暗黙の共有クラスについては例外となります。キャッシュされたオブジェクトがその内部データを他のインスタンスと共有している場合、QCache はそのオブジェクトを横にしておく可能性があり、totalCost() をmaxCost() よりも大きくする一因になる可能性があります。

setMaxCost()も参照してください

[noexcept] T *QCache::operator[](const Key &key) const

キーkey に関連付けられたオブジェクト、またはキーがキャッシュに存在しない場合はnullptr を返します。

これはobject() と同じです。

警告: 返されたオブジェクトはQCache が所有しており、いつでも削除できます。

© 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.