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和智能指针的区别的主要内容,如果未能解决你的问题,请参考以下文章