是聪明的指针是RAII的好习惯
Is smart pointer a good practice of RAII?
首先,这是对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旨在代表对象终身管理的概念。
相关文章:
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 让二传手返回布尔值是好习惯吗?
- 在同一C 源文件中使用多个名称空间是一个好习惯吗?
- 是聪明的指针是RAII的好习惯
- 使用 move-constructor 时将 self 重置为 nullptr 是一个好习惯吗?
- 将指针施放为成员函数作为C函数的指针是一个好习惯吗?
- 重建operator()是重建的好习惯
- 这是使用访问功能的好习惯
- 在cccallfuncnd中,我们通过指针.通过当地范围的指针是一个好习惯
- 在C 中,这是用字符串文字初始化char数组的好习惯
- 使用工厂朋友类分配新类,好习惯
- C++使用"this"是一个好习惯吗?
- 在每个可能的地方使用指针是否是一种好习惯
- 在销毁 pthread 互斥锁之前锁定它是否是一种好习惯
- 总是用{}初始化对象是个好习惯吗
- 这是传递可选/NULL shared_ptr参数的好习惯吗?
- 在头文件中定义c++函数是个好习惯吗?
- 大量使用静态成员变量是一种好习惯吗?
- 重命名和重新包含 std::unique_ptr 是一种好习惯吗?