mutable

mutable 使用小笔记

Posted by YuCong on July 5, 2021

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。