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 * | 对象 (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);
使用 QCache 优于某些其它基于键的数据结构 (譬如 QMap or QHash ),QCache 自动获取插入缓存中对象的所有权,并删除它们以便为新对象腾出空间,若有必要。在将对象插入缓存时,可以指定 cost ,应该与对象所占用的内存量有一些近似关系。当所有对象的开销之和 ( totalCost ()) 超过缓存限制 ( maxCost ()),QCache 开始删除缓存中的对象以保持在限制之下,从最近访问较少的对象开始。
默认情况下,QCache 的 maxCost () 为 100。可以在 QCache 构造函数中指定不同值:
QCache<int, MyDataStructure> cache(5000);
每次调用 insert (),可以将开销指定作为第 3 自变量 (在键和指向要插入对象的指针之后)。调用后,插入对象归 QCache 所有,QCache 可以随时删除它以便为其它对象腾出空间。
要在缓存中查找对象,使用
对象
() 或 operator[]()。此函数通过键查找对象,并返回指向缓存对象 (由缓存拥有) 的指针或
nullptr
.
若想要从缓存移除特定键对象,调用 remove ()。这还会删除对象。若想要从缓存中移除对象而不被 QCache 删除,使用 take ().
另请参阅 QPixmapCache , QHash ,和 QMap .
[explicit noexcept]
QCache::
QCache
(
qsizetype
maxCost
= 100)
Constructs a cache whose contents will never have a total cost greater than maxCost .
销毁缓存。删除缓存中的所有对象。
[noexcept(...)]
void
QCache::
clear
()
删除缓存中的所有对象。
注意: This function does not throw any exception when "std::is_nothrow_destructible_v<Node>" is true.
[noexcept]
bool
QCache::
contains
(const
Key
&
key
) const
返回
true
若缓存包含的对象关联键
key
;否则返回
false
.
[noexcept]
qsizetype
QCache::
count
() const
如同 size ().
插入 object into the cache with key key and associated cost cost . Any object with the same key already in the cache will be removed.
After this call, object is owned by the QCache and may be deleted at any time. In particular, if cost 大于 maxCost (), the object will be deleted immediately.
函数返回
true
若对象被插入缓存;否则它返回
false
.
[noexcept]
bool
QCache::
isEmpty
() const
返回
true
若缓存不包含对象;否则返回
false
.
另请参阅 size ().
返回缓存中的键列表。
[noexcept]
qsizetype
QCache::
maxCost
() const
返回缓存的最大允许总开销。
另请参阅 setMaxCost () 和 totalCost ().
[noexcept]
T
*QCache::
对象
(const
Key
&
key
) const
返回的对象关联键
key
,或
nullptr
若键未存在于缓存中。
警告: 返回的对象归 QCache 且可以在任何时候被删除。
[noexcept(...)]
bool
QCache::
remove
(const
Key
&
key
)
删除的对象关联键
key
。返回
true
若对象在缓存中被找到;否则返回
false
.
注意: This function does not throw any exception when "std::is_nothrow_destructible_v<Node>" is true.
[noexcept(...)]
void
QCache::
setMaxCost
(
qsizetype
cost
)
Sets the maximum allowed total cost of the cache to cost . If the current total cost is greater than cost , some objects are deleted immediately.
注意: This function does not throw any exception when "std::is_nothrow_destructible_v<Node>" is true.
另请参阅 maxCost () 和 totalCost ().
[noexcept]
qsizetype
QCache::
size
() const
返回缓存中的对象数。
另请参阅 isEmpty ().
[noexcept(...)]
T
*QCache::
take
(const
Key
&
key
)
Takes the object associated with key key out of the cache without deleting it. Returns a pointer to the object taken out, or 0 if the key does not exist in the cache.
返回对象的所有权被传递给调用者。
注意: This function does not throw any exception when "std::is_nothrow_destructible_v<Key>" is true.
另请参阅 remove ().
[noexcept]
qsizetype
QCache::
totalCost
() const
返回缓存中对象的总开销。
此值通常低于 maxCost (),但 QCache makes an exception for Qt's 隐式共享 classes. If a cached object shares its internal data with another instance, QCache may keep the object lying around, possibly contributing to making totalCost() larger than maxCost ().
另请参阅 setMaxCost ().
[noexcept]
T
*QCache::
operator[]
(const
Key
&
key
) const
返回的对象关联键
key
,或
nullptr
若键未存在于缓存中。
这如同 对象 ().
警告: 返回的对象归 QCache 且可以在任何时候被删除。