【问题标题】: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。

      【讨论】:

        猜你喜欢
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 2014-09-25
        • 1970-01-01
        相关资源
        最近更新 更多