【问题标题】:The difference between RAII and smart pointers in C++C++中RAII和智能指针的区别
【发布时间】:2016-03-08 05:49:04
【问题描述】:
这两者之间的区别对我来说还不是很清楚。我所读到的关于它们的内容非常庞大和复杂(就像 C++ 一样)。例如,this one 属于多年前,也来自维基百科。可能这个问题本身就很复杂。
我对它们的看法是,RAII 是一种我们将其用于智能指针的机制,但我不确定这一点。我需要一个简单直接的答案。
您能用简单的语言和一小段示例代码解释一下吗?
请记住,我的 C++ 水平很低。
【问题讨论】:
标签:
c++
smart-pointers
raii
【解决方案1】:
RAII 是利用 C++ 自动调用析构函数的思想,释放构造函数中获取的资源。
首字母缩略词只是模糊地表示,Resource Acquisition Is Initialization。
smart pointer 是一个至少重载 operator-> 和取消引用 operator* 以启用指针表示法的类。通常,智能指针将使用 RAII 技术自动释放内存。但它可以做其他事情。然而,智能指针以某种方式处理包含的原始指针的“所有权”是隐含的。例如,一个简单的迭代器类重载了operator->和operator*,但不被视为智能指针。
【解决方案2】:
它们是互补的概念。 RAII 意味着对象会自动处理自己的资源。智能指针是为分配的内存完成 RAII 的一种方式。
【解决方案3】:
RAII 是一种技术:
Resource Acquisition Is Initialization 或 RAII,是一种 C++ 编程技术[1][2],它绑定资源的生命周期(分配的内存、执行线程、打开的套接字、打开的文件、锁定的互斥锁、数据库连接——供应有限的任何东西)到具有自动存储持续时间的对象的生命周期。
RAII 的概念包括所有有限的资源,而Smart points 期望管理动态分配的内存或由普通指针表示的任何资源,遵循 RAII。