QCache类

template <typename Key, typename T> class QCache

QCache类是一个模板类,它提供了一个缓存。 更多...

头文件 #include <QCache>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:该类中的所有函数都是可重入的。可重入.

公共函数

QCache(qsizetype maxCost = 100)
~QCache()
voidclear()
boolcontains(const Key &key) const
qsizetypecount() const
boolinsert(const Key &key, T *object, qsizetype cost = 1)
boolisEmpty() const
QList<Key>keys() const
qsizetypemaxCost() const
T *object(const Key &key) const
boolremove(const Key &key)
voidsetMaxCost(qsizetype cost)
qsizetypesize() const
T *take(const Key &key)
qsizetypetotalCost() 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 而不是某些其他基于键的数据结构(如 QMapQHash)的优点是 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()。

另请参阅 QPixmapCacheQHashQMap

成员函数文档

[明确 noexcept] QCache::QCache(qsizetype maxCost = 100)

构建一个缓存,其内容总成本永远不会超过 maxCost

QCache::~QCache()

销毁缓存。删除缓存中的所有对象。

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

删除缓存中的所有对象。

注意:当 "std::is_nothrow_destructible_v" 为真时,此函数不会抛出任何异常。

另请参阅 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 所拥有,可能在任何时候被删除。特别是,如果 cost 大于 maxCost,则对象将立即被删除。

如果对象已插入缓存,则函数返回 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" 为真时,此函数不会抛出任何异常。

另请参阅take() 和 clear()。

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

将缓存允许的最大总成本设置为 cost。如果当前总成本大于 cost,则立即删除一些对象。

注意:当 "std::is_nothrow_destructible_v" 为真时,此函数不会抛出任何异常。

另请参阅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 拥有,并且可能随时被删除。

© 2024 Qt 公司有限。此处包含的文档贡献者是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 和相应徽标是芬兰以及全球其他国家的 Qt 公司的商标。所有其他商标所有权归其各自所有者。