870920 Menu

补充一个类模板:ScopedValueSetter

ScopedValueSetter类模板基于RAII技术,可在作用域范围内临时修改某个变量或对象的值,离开此作用域后,该变量或对象恢复原值,或者自动成为另一个值。该类模板有两个构造函数,其用法见示例:

关于RAII:Resource Acquisition Is Initialization,资源获取即初始化(以初始化的方式获取资源)。即:使用对象来代表或管理资源,利用C++对象生命期的概念控制资源的获取和释放,将资源的生命期和对象的生命期紧密关联到一起。如需要某种资源(内存、缓冲区、文件句柄、网络连接等等),则创建一个代表该资源的RAII类的对象即可。步骤有三:

  • 自定义类,代表所要管理的资源。
  • 自定义基于RAII技术的类,负责管理资源类的对象(指针)。
  • 使用时,创建RAII类的栈对象。

JUCE类库中,多线程环境下使用很频繁的ScopedLock(作用域锁)也是基于RAII技术实现其功能的。