Aqu*_*irl 4 c++ oop terminology raii
我知道RAII做了什么.当代码抛出异常时,它就是防止内存泄漏等.
现在,我希望了解这个聪明术语的含义. http://en.wikipedia.org/wiki/Acquisition
获得意味着获得某些东
那么,当我们说资源获取是初始化时,这意味着什么?
我只是在谈论这里的术语的含义,而不是一般的概念.
之前已经说过(可能是斯科特迈耶斯,我不记得),RAII应该被称为"销毁是资源释放",或者说是这样的话.
字面意思是"资源获取是初始化"意味着当构造(初始化)对象时,它获取一些资源(例如内存分配或锁定).换句话说,它表示你应该只通过初始化一些析构函数将释放它的对象来获取资源.
这是对压力很重要,因为它是由C编码风格出发,在这里您可以通过任何手段特定的API提供(例如获取资源malloc()
,accept()
或pthread_mutex_lock()
),并通过显式调用相应的功能(例如释放出来free()
,close()
,pthread_mutex_unlock()
).C++中存在异常使得这种方法相当不可行.即使在C语言中,它也会产生一些繁琐的代码,每次使用API都必须写出来,并且每个用户都必须确保控件在完成资源使用后总是通过该代码.
但模式的重要部分是当对象被销毁时,它会释放该资源.通过初始化对象获取资源,或者在初始化对象之后对其执行其他操作,实际上并不重要.当存在除了初始化之外的操作以生成由RAII对象管理的资源时,人们仍将对象称为"RAII对象".
因此,不要过于担心"RAII"中的"获取是初始化",因为无论如何它有点误导.