mutable
Created 2021.07.05 by Cong Yu; Last modified: 2021.07.05-v1.0.1
Contact: windmillyucong@163.com
Copyleft! 2022 Cong Yu. Some rights reserved.
mutable
mutable 常用于标记理应声明为cost 方法里的 有改动的且外界不需要关心的 成员变量 。
典型例子:
声明mutable的互赤量,则可支持在const 函数下的对互斥量上锁。
对于用户而言,Get方法理应是const的,不声明为const容易造成误解。且用户不需要关心该方法中实质上非const的变量 pose_mutex_的变更,因而声明pose_mutex_为mutable是非常必要的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class UserClass {
public:
Eigen::Matrix GetCameraPose() const;
private:
mutable std::mutex pose_mutex_;
Eigen::Matrix4d camera_T_global_;
}
Eigen::Matrix4d UserClass::GetCameraPose() const {
std::lock_guard<std::mutex> lock(pose_mutex_);
return camera_T_global_;
}
典型例子2:
在并查集中,在Find()方法中通常会有个成员变量来实现一种类似“缓存“的策略,以提高查询效率。
此时Find()方法理应声明为const,因为对用户而言,不需要感知内部的“缓存”策略。
该缓存成员变量 理应声明为mutable。