我有一个抽象基类
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
的数量不断增加,我通过向PersistentMap::db
添加mutable
说明符(以及一个注释来提醒自己这种做法的丑陋)来摆脱它们。
- 我的第一次尝试使用
const_cast
是否线程安全? - 我的新方法是线程安全的吗,还是
db
也应该标记为volatile
?
const_cast
、const
和mutable
是来自“类型系统”的内容,与线程安全无关。因此第一个问题没有任何意义。此外,“volatile”在多线程中没有用处,这是一个常见的误解(参见https://dev59.com/5HE95IYBdhLWcg3wDpYG)。 - GManNickG