QCache类
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> 定义了一个存储类型为 T 的对象与类型为 Key 的键相关联的缓存。例如,这是一个存储与整数键关联的 Employee 类型对象的缓存的定义
QCache<int, Employee> cache;
以下是向缓存中插入对象的示例
Employee *employee = new Employee; employee->setId(37); employee->setName("Richard Schmit"); ... cache.insert(employee->id(), employee);
使用 QCache 而不是某些其他基于键的数据结构(如 QMap 或 QHash)的优点是 QCache 会自动获取插入到缓存中的对象的所有权,并在必要时删除它们以腾出空间。当将对象插入到缓存中时,您可以指定一个 cost(成本),它应该与对象占用的内存量大致成比例。当所有对象成本的总和(《总成本》())超过了缓存的限制({"maxCost" translate="no">maxCost()))时,QCache 开始删除缓存中的对象以保持低于限制,从最近访问次数较少的对象开始。
默认情况下,QCache 的 《maxCost" translate="no">maxCost() 是 100。您可以在 QCache 构造函数中指定不同的值
QCache<int, MyDataStructure> cache(5000);
每次调用 《insert" translate="no">insert() 时,您都可以指定一个成本作为第三个参数(在键和要插入的对象的指针之后)。调用后,插入的对象由 QCache 所拥有,它可能会在任何时候删除它以腾出空间给其他对象。
要在缓存中查找对象,请使用 object() 或操作符 [](). 此函数通过键查找对象,并返回缓存的指针(由缓存所有)或 nullptr
。
如果您想从特定键的缓存中删除一个对象,请调用 remove()。这将同时删除对象。如果您想在 QCache 不删除对象的情况下从缓存中删除对象,请使用 take()。
另请参阅 QPixmapCache,QHash 和 QMap。
成员函数文档
[明确 noexcept]
QCache::QCache(qsizetype maxCost = 100)
构建一个缓存,其内容总成本永远不会超过 maxCost。
QCache::~QCache()
销毁缓存。删除缓存中的所有对象。
[noexcept(...)]
void QCache::clear()
删除缓存中的所有对象。
注意:当 "std::is_nothrow_destructible_v
[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
[noexcept(...)]
void QCache::setMaxCost(qsizetype cost)
将缓存允许的最大总成本设置为 cost。如果当前总成本大于 cost,则立即删除一些对象。
注意:当 "std::is_nothrow_destructible_v
[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 拥有,并且可能随时被删除。
© 2024 Qt 公司有限。此处包含的文档贡献者是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 和相应徽标是芬兰以及全球其他国家的 Qt 公司的商标。所有其他商标所有权归其各自所有者。