什么是RAII?
先看看书面的解释:RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。
RAII是Resource Acquisition Is Initialization, 翻译过来就是“资源获取即初始化”,是不是比较难明白。 接着看。
RAII是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。
这样说是不是明白多了。 还可以再打个比方。 我们在函数声明的局部变量。 会在函数结束后自动释放栈内存。
当我们把局部变量换成一个类实例化的对像。 当函数结束时, 就会自动调用该类的析构函数。如果我们在该类的析构函数中释放了该类构造时申请的堆内存。 那么在这种场景下实际上就利用了C++的RAII特性。
上面的这种方式就是用了RAII是用来管理资源、避免资源泄漏的方法。
智能指针(std::shared_ptr和std::unique_ptr)即RAII最具代表的实现,使用智能指针,可以实现自动的内存管理,再也不需要担心忘记delete造成的内存泄漏。毫不夸张的来讲,有了智能指针,代码中几乎不需要再出现delete了。
通过上面的分析可以看出,RAII的核心思想是将资源或者状态与对象的生命周期绑定,通过C++的语言机制,实现资源和状态的安全管理。理解和使用RAII能使软件设计更清晰,代码更健壮。
END