首先,这是对RAII&Smart Pointer的讨论
我一直认为像shared_ptr
这样的智能指针是RAII的一个好习惯,因为它在构造函数中获取堆内存资源,如
shared_ptr<A> pA(new pA());
并且可以通过引用计数及其析构函数在正确的时间释放内存 但是,今天早上我的同事告诉我:
“智能指针不是我认为的 RAII 。在STL中唯一可以严格称为RAII 的是
std::lock_guard
,其他只不过是 RRID 。“
所以我弄错了什么?或者我的同事所说的实际上是没有意义的?
答案 0 :(得分:5)
资源获取是初始化或RAII,是一种C ++编程技术,它绑定在使用之前必须获取的资源的生命周期(分配的堆内存,执行的线程,打开的套接字,打开的文件,锁定的互斥锁,磁盘空间,数据库连接 - 存在于有限供应中的任何东西)到对象的生命周期。
std::shared_ptr
肯定是RAII,因为它获取资源并将其生命周期绑定到自己的资源,从而接管释放/破坏资源的责任。这是RAII的核心原则。
术语 RRID (资源释放是毁灭性)很少见,它的含义似乎有些含糊不清。大多数情况下,它与RAII具有相同的含义。
恕我直言,围绕RAII变体的许多讨论都是通过过于准确地解释该术语的含义而认为的。 RAII旨在表示对象生命周期管理的概念。