是否存在关于何时基本上只读的方法,但具有可能需要修改的互斥锁/锁定的约定,是否为常量?
如果没有,那么如果这种方法是const
谢谢
答案 0 :(得分:54)
您可以使用关键字mutable
标记数据成员,以允许在常量成员函数中修改它们,例如:
struct foo
{
mutable mutex foo_mutex;
// ....
void bar() const
{
auto_locker lock(foo_mutex);
// ...
}
};
尝试尽可能少地执行此操作,因为滥用mutable
是邪恶的。
答案 1 :(得分:13)
对于概念上mutable
的方法,我通常可以使用const
锁和缓存。
特别是在缓存性能计算结果的情况下。这严格来说是调用者不应该关注的实现细节,因此删除const
名称将等同于抽象中的小泄漏。
使用锁,我会问自己锁是否只是一个私有的实现细节。如果锁与其他对象共享,那么它实际上是接口的一部分。
在某些平台上,通过句柄访问锁,因此您可以在方法上使用const
,而无需担心mutable
。