C ++互斥和const正确性

时间:2010-07-13 17:46:20

标签: c++

是否存在关于何时基本上只读的方法,但具有可能需要修改的互斥锁/锁定的约定,是否为常量?

如果没有,那么如果这种方法是const

,会有什么不利/糟糕的设计

谢谢

2 个答案:

答案 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

相关问题