gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:17 24 4
gpt4 key购买 nike

我知道 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com