[笔记] C++ RAII(资源获取即初始化)
何为RAII
RAII(Resource Acquisition Is Initialization)是由Bjarne Stroustrup提出的一种使用局部对象来管理资源(内存,文件,网络)的方式
资源回收
资源回收一直是一个令人头疼的问题,人们总是在new Class()后忘了在正确的地方delete它,仅仅是因为这种小问题,人们也做不好。在工程中,为了解决"人这种生物的能力是有极限的"这种问题,提出了几种回收资源的方式:
- 手动管理
- 垃圾回收(Garbage Collection, GC)
- RAII/所有权模式
垃圾回收多用在动态语言中,它虽然解决了回收问题,但带来了不少的性能损失。
而作为零损耗抽象的C++,其创始人提出了RAII模式,利用系统堆栈在结束时(可形象的理解为一对大括号结束}的时候)自动释放资源的机制来实现半自动回收
示例
在构造函数中获得资源,在析构函数中释放资源,利用C++语言局部对象自动销毁的特性来自动释放
#include
#include
using namespace std;
class RAII
{
public:
char* ptr;
RAII()
{
ptr = (char*) malloc(sizeof(*ptr) * 64);
cout << format("malloc {:#x}", (uint64_t) ptr) << endl;
}
~RAII()
{
free(ptr);
cout << format("free {:#x}", (uint64_t) ptr) << endl;
}
};
int main()
{
auto raii = RAII();
return 0;
}