QCache Class

template <typename Key, typename T> class QCache

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

Header: #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>" が真の場合、例外をスローしません。

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>" が真の場合、例外をスローしません。

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

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

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

注意: この関数は、"std::is_nothrow_destructible_v<Node>" が真の場合、例外をスローしません。

maxCost() およびtotalCost()も参照のこと

[noexcept] qsizetype QCache::size() const

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

isEmpty() も参照して ください。

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

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

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

注意: この関数は、"std::is_nothrow_destructible_v<Key>" が真の場合、例外をスローしません。

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 が所有しており、いつでも削除できます。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。