c – const cast允许读锁定,这味道不好吗?

c – const cast允许读锁定,这味道不好吗?,第1张

概述我想对标记为const的对象执行只读方法,但为了安全地执行此 *** 作,我需要锁定一个reader-writer互斥锁: const Value Object::list() const { ScopedRead lock(children_); ...} 但这打破了因为编译器抱怨“children_”是const等等.我去了ScopedRead类,直到RWMutex类(children_是一 我想对标记为const的对象执行只读方法,但为了安全地执行此 *** 作,我需要锁定一个reader-writer互斥锁:
const Value Object::List() const {  ScopedRead lock(children_);  ...}

但这打破了因为编译器抱怨“children_”是const等等.我去了ScopedRead类,直到RWMutex类(children_是一个子类),允许在const对象上使用read_lock,但我必须写这个:

inline voID read_lock() const {  pthread_rwlock_rdlock(const_cast<pthread_rwlock_t*>(&rwlock_));}

我一直都知道const_cast是代码味道.有什么办法可以避免这个吗

解决方法 使锁可变
mutable pthread_rwlock_t rwlock;

这是使用mutable的常见场景.对象的只读查询(顾名思义)是一种不需要非const访问的 *** 作.当您希望能够修改对象的不可见或具有可观察的副作用的部分时,Mutable被认为是一种很好的做法.您的锁用于确保对对象数据的顺序访问,并且更改它不会影响对象中包含的数据,也不会对以后的调用产生可观察的副作用,因此它仍然遵循对象的常量.

总结

以上是内存溢出为你收集整理的c – const cast允许读锁定,这味道不好吗?全部内容,希望文章能够帮你解决c – const cast允许读锁定,这味道不好吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1237860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存