是聪明的指针是RAII的好习惯

Is smart pointer a good practice of RAII?

本文关键字:好习惯 RAII 指针      更新时间:2023-10-16

首先,这是对raii&智能指针的讨论。
我一直以为像shared_ptr这样的智能指针是RAII的一个很好的做法

shared_ptr<A> pA(new pA());

,可以通过参考计数及其破坏者在正确的时间释放内存。
但是,今天早上我的同事告诉我:

" 智能指针不是我认为 raii std::lock_guard,其他不过是 rrid 。"

所以我弄错了吗?或我的同事说的实际上是无意的?

来自cppReference:

资源获取是初始化或RAII,是一种C 编程技术,它绑定了必须在使用前必须获取的资源的生命周期(分配堆内存,执行线程,打开套接字,打开套接字,打开文件,锁定的sutex,locked mutex,locked sutex,locked mutex,磁盘空间,数据库连接 - 对象的寿命有限的任何物品。

std::shared_ptr绝对是RAII,因为它可以使资源保持并将其生命周期绑定到其自己,因此接管了释放/破坏资源的责任。这是raii的核心原则。

术语 rrid (资源释放是破坏的(很少见,其含义似乎有些模棱两可。通常使用与raii相同的含义。

imho许多讨论围绕着Raii认为的变体,从而确切地解释该术语的含义。RAII旨在代表对象终身管理的概念。