C++关键字mutable的思考

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

 

你可能感兴趣的:(C++关键字mutable的思考)