背景图《多变的铁人》
接着上篇文章说,当我们还在语义const
和语法const
的实现效果不一致中苦苦挣扎的时候,我们实际需要的,是一种手段声明变量在封装内部为一种“可变的”状态,但对外提供表现出来的应该是const
属性。mutable
是在C++中被讨论相对较少的一个关键字。但是它却十分有用,而且在你想写出const
正确的代码时几乎不可避免会用到它。
我们的核心观点在于,在外部表现为const
的变量在内部转变为非const
这一行为应该尽量不被外部所感知。然而如果我们定义了一个函数为const
后,编译器不会允许我们再改变任何一个成员变量,即便在外部它表现出const
属性,这就是最核心的矛盾。
接着上篇文章中Mesh类的getVolume()
例子,我们继续深入探讨一下:
Mutex
在上篇文章中,我们使用的Mesh类并不是线程安全的。所以在一个多线程的应用中,一个Mesh
类可能会被多个线程共享,我们可能会用互斥锁Mutex来保证数据的线程安全。像下边这样:
class Mesh {
std::vector<Vertex> vertices; //模型顶点的集合
std::mutex mtx;
double volume; //计算出来的体积
bool volumeCalculated;