一、C++ RAII机制
1、什么是RAII?
RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。
2、为什么要使用RAII?
RAII是用来管理资源、避免资源泄漏的方法。在编程使用系统资源时,都必须遵循一个步骤:
1)申请资源
2)使用资源
3)释放资源
第一步和第二步缺一不可,因为资源必须要申请才能使用的,使用完成以后,必须要释放,如果不释放的话,就会造成资源泄漏。但是往往在编程过程中,会遇到异常分支不释放的问题。因此、需要使用RAII来对资源进行自动化管理,避免出现资源泄漏问题。
3、Lock类
直接使用mutex锁,如果在临界区抛出异常或者走到异常分支return,就会导致没有解锁就退出的问题,此时很可能会发生死锁。lock_guard采用"资源分配时初始化"(RAII)方法来加锁、解锁,极大地简化了程序员编写mutex相关的异常处理代码。C++11的标准库中提供了std::lock_guard类模板做mutex的RAII。lock_guard的优点是在构造时自动对mutex加锁,在作用域结束/析构时,自动对mutex进行解锁。