我有一个抽象基类
class Map {
public:
virtual Value get(Key const &) const;
};
来自外部库的数据库类
class Database {
public:
// logically const and thread-safe
Value get(Key const &key);
};
我开始使用像
这样的实现class PersistentMap : public Map {
Database db;
public:
Value get(Key const &key) const
{ return const_cast<Database &>(db).get(key); }
};
随着const_cast
的数量增长超出界限,我通过向mutable
添加PersistentMap::db
说明符(以及提醒自己丑陋的评论)来摆脱它们。 / p>
const_cast
线程安全吗?db
也应该标记为volatile
?答案 0 :(得分:1)
这完全取决于Database :: get是否是线程安全的。如果它包含阻止并发访问的锁,或者对于并发访问是安全的,那么你的代码可以使用const_cast或mutable。使用volatile是完全不相关的。