孔雀开发小屋

专注并致力于手机客户端开发
<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

  • 随笔 - 103
  • 文章 - 0
  • 评论 - 251
  • 引用 - 0

常用链接

留言簿(38)

随笔分类

随笔档案

关注的博客

朋友的博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

C++关键字mutable的思考


在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

最近在看irrlicht的代码,其关于引用计数的实现中使用了mutable关键字。关键代码如下:

 1 class IReferenceCounted
 2 {
 3 public:
 4
 5  //! Constructor.
 6  IReferenceCounted()
 7   : ReferenceCounter(1)
 8  {
 9  }

10
11  //! Destructor.
12  virtual ~IReferenceCounted()
13  {
14  }

15
16  void grab() const ++ReferenceCounter; }
17
18
19  bool drop() const
20  {
21   --ReferenceCounter;
22   if (!ReferenceCounter)
23   {
24    delete this;
25    return true;
26   }

27
28   return false;
29  }

30
31  //! Get the reference count.
32  s32 getReferenceCount() const
33  {
34   return ReferenceCounter;
35  }

36
37 private:
38
39  //! The reference counter. Mutable to do reference counting on const objects.
40  mutable s32 ReferenceCounter;
41 }
;
42

 

网上有人说:mutable 数据成员的使用看上去像是骗术,因为它能够使 const 函数修改对象的数据成员。然而,明智地使用 mutable 关键字可以提高代码质量,因为它能够让你向用户隐藏实现细节,而无须使用不确定的东西,比如 const_cast<>。

我认为C++设置出这个关键字应该有更深层次的理由和初衷。坛子里大牛多多,请大家讨论一下在实际工作或编码过程中对于该关键字的使用和认识。谢谢各位。

 

posted on 2010-10-30 11:27 孔雀 阅读(2278) 评论(7)  编辑 收藏 引用 所属分类: C/C++

评论

# re: C++关键字mutable的思考 2010-10-30 11:50 OwnWaterloo

逻辑上是const, 但又必须修改成员。 比如缓式求值什么的。
  回复  更多评论    

# re: C++关键字mutable的思考 2010-10-30 11:53 neodoxy

c++就是一个用新的错误去弥补老的错误的产物
  回复  更多评论    

# re: C++关键字mutable的思考 2010-10-30 13:33 老安

@neodoxy
同意。呵呵。
  回复  更多评论    

# re: C++关键字mutable的思考 2010-10-30 14:15 空明流转

极少用。偶尔遇到这种问题,例如Lazy Evaluation,应该尽量用Const Cast,而不是mutable。
并且,标记了const的,一般意味着只读。如果要对象有线程安全性,就必须要能满足Write-One Read-Many的约定。
而Mutable隐式的打破了这样的约定,是很不好的。
  回复  更多评论    

# re: C++关键字mutable的思考 2010-11-01 16:07 陈梓瀚(vczh)

@空明流转
应该说Lazy Evaluation本身就是个const,那要不要const都是无所谓的……
  回复  更多评论    

# re: C++关键字mutable的思考[未登录] 2010-11-05 11:25 Kevin

某些成员可以修改,但并不影响逻辑上的对象const属性,这时候就使用mutable

我觉得这无所谓C++的新错误旧错误,关键看你如何使用
  回复  更多评论    

# re: C++关键字mutable的思考 2010-11-14 22:19 ebencheung

一个成员函数计算某个东西的时候要lock. 算完了unlock. 该成员函数又不改变类的数据. 这时这个lock被声明为mutable
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理