谁能向我解释Raii的观点
Can anyone explain to me the point of RAII?
因此,如果正确理解,RAII的重点是删除内存管理的麻烦。也就是说,您在对象的破坏者中进行删除。这样,当指针脱离范围时,您不必担心删除它。所以这是我不明白的:为什么不首先声明堆栈上的变量?
您的理解有一些错误:
-
RAII的重点是消除资源管理的麻烦,而不仅仅是内存。例如:需要关闭的文件句柄,需要解锁的静音,需要释放的对象,需要释放的内存。基本上,如果您使用资源完成时必须做些事情,那么这是RAII的一个很好的情况。
-
当RAW C 指针脱离范围时,它无济于事。我认为您是在谈论一个智能指针,它只是一个围绕原始指针的对象。当该对象脱离范围时,将调用其破坏者,并且可以使用驱动器来释放分配在构造函数中的内存。
-
是否在堆栈或堆上分配了"释放"的对象是否没有区别。关键是,当您获取资源时,您会在构造函数中执行某些操作,并且完成后,您会在灾难中做其他事情。
您无法声明数据库连接,堆栈上的窗口或文件。至少,这正是RAII允许您做的事情是可以说的,但是没有此事,您就不能。
raii的要点是,无论您如何退出范围,都将调用破坏者。
因此,无论您是正常退出还是通过投掷例外,您的资源将被释放。
btw,"资源"不必只是内存 - 它可以是文件句柄,数据库连接等。
相关文章:
- 具有瞬态资源的RAII类
- 使用RAII在给定次数的迭代后重新分配资源
- 在文件夹迭代上实现 RAII
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 在 RAII 构造中修改 RVO 值是否安全?
- RAII 等效于 FIFO 发布订单
- 当无法进行RAII时,如何在C++中"try/finally"?
- 如何处理 RAII 中的资源等待
- c++重载=运算符,RAII
- 如何使用 RAII 包装返回错误代码的 C 分配
- 使用 RAII 替换最终块以释放内存
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 返回持有 std::mutex 锁的 RAII 容器类
- 继承、后台线程和 RAII
- 将 C 包装在 RAII 中而不公开类型
- 避免在构造函数中分配或保持简单性(和 RAII?
- 避免 RAII 计时器对象中的虚假构造和破坏
- Raii vs.垃圾收集器
- 为什么这个 RAII cout 重定向器不起作用:
- 谁能向我解释Raii的观点