c++ - 术语的含义 - Resource Acquisition Is Initialization

标签 c++ oop terminology raii

我知道 RAII 的作用。当/如果代码抛出异常时,这都是为了防止内存泄漏等。

现在,我想了解那个智能 术语的含义。 http://en.wikipedia.org/wiki/Acquisition

Acquisition 意味着获得某物。

那么,当我们说资源获取就是初始化时,这是什么意思?
我只是在这里谈论这个术语的含义,而不是一般的概念。

最佳答案

之前有人说过(可能是 Scott Meyers 说的,我记不清了),RAII 应该被称为“Destruction is resource release”,或者类似的词。

“资源获取即初始化”字面上的意思是,当一个对象被构造(初始化)时,它获取了一些资源(如内存分配或锁)。换句话说,它说你应该只获取一个资源,方法是初始化一些其析构函数将释放它的对象。

强调这一点很重要,因为它与 C 编码风格不同,在 C 编码风格中,您可以通过特定 API 提供的任何方式获取资源(例如 malloc()accept(),或pthread_mutex_lock()),并通过显式调用相应的函数(例如free()close()pthread_mutex_unlock())。 C++ 中异常的存在使得这种方法相当行不通。即使在 C 中,它也会导致每次使用 API 都必须写出一些乏味的代码,并且每个用户都必须确保在他们使用完资源后控制始终通过该代码。

但是该模式的重要部分是当对象被销毁时,它会释放该资源。您是通过初始化对象来获取资源,还是在对象初始化后对对象进行其他操作,这实际上并不重要。当存在生成由 RAII 对象管理的资源的初始化以外的操作时,人们仍会将对象称为“RAII 对象”。

所以,不要太担心“RAII”中的“获取即初始化”,因为无论如何它都有点误导。

关于c++ - 术语的含义 - Resource Acquisition Is Initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015123/

相关文章:

php - 有没有人试图让 PHP 的系统功能更加面向对象?

php - 什么是 PHP 中的数组内部指针?

c++ - 重复 move 已被 move 捕获的 lambda 中的变量

c++ - 使用变量类型的 std::function 运行线程

c++ - 为什么要为引用分配返回值?

c# - 幕后的new和override到底发生了什么?

php oop MVC 设计 - 应用程序编辑数据的适当架构

c# - 如何从 MFC 应用程序调用 .NET 窗体?

unity3d - 边界框与矩形

database - BASE 术语解释