介绍
RAII(Resource Acquisition Is Initialization),资源获取即初始化,C++编程一种手段。很多时候我们需要在一个函数中使用一些资源,这些资源需要在函数结束之后释放,比如文件、socket、锁等等。在不用RAII时,我们一般要在函数return前手动释放这些资源,如果忘记释放会造成内存泄漏,资源一直被占用的问题。RAII能够确保资源在函数中被申请之后,return时自动被释放,这听起来有点像临时变量,没错,这就是和临时变量类似,利用栈空间在函数结束后自动释放的特点进行资源释放。
栗子
RAII的使用可以总结为,将资源封装到类中,通过类的构造函数来获取资源,在析构函数中释放资源。临时资源使用RAII来管理可以确保在资源用完后及时释放。
C++标准库中的RAII
C++标准库中提供了几个RAII封装来管理用户资源:
- std::unique_ptr和std::share_ptr来管理动态申请的内存以及替代传统指针
- std::lock_guard,std::unique_lock,std::shared_lock用来管理互斥锁
std:uniqueptr和std::share_ptr
待补充
std::lock_guard/std::unique_lock/std::shared_lock
待补充