QCache Class
template <typename Key, typename T> class QCacheQCache クラスは、キャッシュ機能を提供するテンプレートクラスです。詳細...
| ヘッダー: | #include <QCache> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 継承されたメンバを含む、すべてのメンバの一覧
- QCache は「暗黙的に共有されるクラス」の一部です。
注:このクラスのすべての関数は再入可能です。
パブリック関数
| 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> は、Key 型のキーに関連付けられたT 型のオブジェクトを格納するキャッシュを定義します。たとえば、整数のキーに関連付けられた Employee 型のオブジェクトを格納するキャッシュの定義は次のとおりです。
QCache<int, Employee> cache;キャッシュにオブジェクトを挿入する方法は次のとおりです。
Employee *employee = new Employee;
employee->setId(37);
employee->setName("Richard Schmit");
//...
cache.insert(employee->id(), employee);他のキーベースのデータ構造(QMap やQHash など)と比較して QCache を使用する利点は、QCache がキャッシュに挿入されたオブジェクトの所有権を自動的に取得し、必要に応じて新しいオブジェクトのためのスペースを確保するためにそれらを削除する点にあります。 オブジェクトをキャッシュに挿入する際、コストを指定できます。このコストは、オブジェクトが占有するメモリ量と概ね比例する関係にある必要があります。 すべてのオブジェクトのコストの合計(totalCost()))がキャッシュの制限(maxCost()))を超えた場合、QCache は制限内に収まるよう、キャッシュ内のオブジェクトを削除し始めます。削除は、最近アクセスされた順に古いものから行われます。
デフォルトでは、QCacheのmaxCost()は100に設定されています。QCacheのコンストラクタで別の値を指定することも可能です:
QCache<int, MyDataStructure> cache(5000);insert() を呼び出すたびに、3番目の引数(キーと挿入するオブジェクトへのポインタの後に)としてコストを指定できます。呼び出し後、挿入されたオブジェクトは QCache が所有することになり、QCache は他のオブジェクトのためのスペースを確保するために、いつでもそのオブジェクトを削除する可能性があります。
キャッシュ内のオブジェクトを検索するには、object() または演算子 []() を使用します。この関数はキーによってオブジェクトを検索し、キャッシュされたオブジェクトへのポインタ(キャッシュが所有)または `nullptr` を返します。
特定のキーに対応するオブジェクトをキャッシュから削除したい場合は、remove() を呼び出します。これにより、オブジェクトも削除されます。QCache による削除を行わずにオブジェクトをキャッシュから削除したい場合は、take() を使用してください。
関連項目: QPixmapCache 、QHash 、およびQMap 。
メンバ関数のドキュメント
[explicit noexcept] QCache::QCache(qsizetype maxCost = 100)
maxCost を超える総コストを持つキャッシュを構築することはありません。
QCache::~QCache()
キャッシュを破棄します。キャッシュ内のすべてのオブジェクトを削除します。
[noexcept(...)] void QCache::clear()
キャッシュ内のすべてのオブジェクトを削除します。
注: std::is_nothrow_destructible_v<Node> がtrue の場合、この関数はnoexceptとなります 。
[noexcept] bool QCache::contains(const Key &key) const
キャッシュにキーkey に関連付けられたオブジェクトが含まれている場合はtrue を返し、そうでない場合はfalse を返します。
[noexcept] qsizetype QCache::count() const
size() と同様です。
bool QCache::insert(const Key &key, T *object, qsizetype cost = 1)
object を、キーkey および関連コストcost とともにキャッシュに挿入します。キャッシュ内にすでに同じキーを持つオブジェクトが存在する場合、そのオブジェクトは削除されます。
この呼び出し後、object はQCache に所有され、いつでも削除される可能性があります。特に、cost がmaxCost() より大きい場合、オブジェクトは直ちに削除されます。
オブジェクトがキャッシュに挿入された場合、この関数は `true ` を返します。そうでない場合は `false` を返します。
[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 が所有しており、いつでも削除される可能性があります。
[noexcept(...)] bool QCache::remove(const Key &key)
キー `key` に関連付けられたオブジェクトを削除します。キャッシュ内にオブジェクトが見つかった場合は `true ` を返し、見つからなかった場合は `false` を返します。
注: std::is_nothrow_destructible_v<Node> がtrue の場合、この関数は noexcept です。
[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 が所有しており、いつでも削除される可能性があります。
© 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.