C++中RAII和智能指针的区别

Posted

技术标签:

【中文标题】C++中RAII和智能指针的区别【英文标题】:The difference between RAII and smart pointers in C++ 【发布时间】:2016-03-08 05:49:04 【问题描述】:

这两者之间的区别对我来说还不是很清楚。我所读到的关于它们的内容非常庞大和复杂(就像 C++ 一样)。例如,this one 属于多年前,也来自***。可能这个问题本身就很复杂。

我对它们的看法是,RAII 是一种我们将其用于智能指针的机制,但我不确定这一点。我需要一个简单直接的答案。

您能用简单的语言和一小段示例代码解释一下吗? 请记住,我的 C++ 水平很低。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于C++中RAII和智能指针的区别的主要内容,如果未能解决你的问题,请参考以下文章

RAII&智能指针

C++RAII与智能指针源码分析(上)

C++智能指针

RAII思想之智能指针

C++智能指针讲解及模拟实现

[C++] 智能指针