我知道 RAII 是做什么的。这都是为了在代码抛出异常时防止内存泄漏等。
现在我想明白这句话的意思smart term.
http://en.wikipedia.org/wiki/收购 http://en.wikipedia.org/wiki/Acquisition
获取意味着获取某物。
所以,当我们这么说的时候资源获取即初始化, 这意味着什么?
我在这里只是谈论这个术语的含义,而不是一般的概念。
以前有人说过(可能是 Scott Meyers 说的,我记不清了),RAII 应该被称为“破坏就是资源释放”,或者类似的说法。
“资源获取就是初始化”字面意思是,当一个对象被构造(初始化)时,它获取一些资源(例如内存分配或锁)。换句话说,它说你应该只acquire一个资源,由初始化某个对象的析构函数将释放它。
强调这一点很重要,因为它与 C 编码风格不同,在 C 编码风格中,您可以通过特定 API 提供的任何方式获取资源(例如malloc()
, accept()
, or pthread_mutex_lock()
),并通过显式调用相应的函数来释放它们(例如free()
, close()
, pthread_mutex_unlock()
)。 C++ 中异常的存在使得这种方法相当不可行。即使在 C 语言中,它也会导致每次使用 API 时都必须编写一些乏味的代码,并且每个用户都必须确保在使用完资源后控制始终通过该代码。
但该模式的重要部分是,当对象被销毁时,它会释放该资源。实际上,无论是通过初始化对象来获取资源,还是在初始化对象后对对象执行其他操作来获取资源,这并不重要。当除了初始化之外还有生成由 RAII 对象管理的资源的操作时,人们仍然会将对象称为“RAII 对象”。
所以,不要太担心“RAII”中的“获取即初始化”,因为无论如何它都有点误导。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)