← 模式

使用 RAII 类型

12345678910111213#include <map> #include <memory> #include <string> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::map<std::string, int> map = {{"Foo", 10}, {"Bar", 20}}; std::string str = "Some text"; std::unique_ptr<int> ptr1 = std::make_unique<int>(8); std::shared_ptr<int> ptr2 = std::make_shared<int>(16); }

此模式采用 CC0 公共领域贡献 许可。

要求 c++98 或更新版本。

意图

避免手动进行内存管理,以提高安全性、减少 bug 和内存泄漏。

描述

第 8-12 行创建的每个对象都会在内部管理一些动态分配的内存(使用 new 关键字分配)。然而,它们的实现方式都保证了在对象被销毁时会释放那些内存。这种实践被称为 RAII。

这些类的使用者不需要手动进行内存管理,从而降低了内存泄漏和其他 bug 的风险。事实上,通过使用这些 RAII 类型,可以完全避免使用 newdelete

同样,一个好的实践是确保你自己编写的类也通过五法则零法则来实现 RAII 范式。

贡献者

  • Joseph Mansfield

最后更新

2018年8月27日

来源

在 GitHub 上 Fork 此模式

分享