谁能向我解释Raii的观点

Can anyone explain to me the point of RAII?

本文关键字:Raii 观点 解释      更新时间:2023-10-16

因此,如果正确理解,RAII的重点是删除内存管理的麻烦。也就是说,您在对象的破坏者中进行删除。这样,当指针脱离范围时,您不必担心删除它。所以这是我不明白的:为什么不首先声明堆栈上的变量?

您的理解有一些错误:

  1. RAII的重点是消除资源管理的麻烦,而不仅仅是内存。例如:需要关闭的文件句柄,需要解锁的静音,需要释放的对象,需要释放的内存。基本上,如果您使用资源完成时必须做些事情,那么这是RAII的一个很好的情况。

  2. 当RAW C 指针脱离范围时,它无济于事。我认为您是在谈论一个智能指针,它只是一个围绕原始指针的对象。当该对象脱离范围时,将调用其破坏者,并且可以使用驱动器来释放分配在构造函数中的内存。

  3. 是否在堆栈或堆上分配了"释放"的对象是否没有区别。关键是,当您获取资源时,您会在构造函数中执行某些操作,并且完成后,您会在灾难中做其他事情。

您无法声明数据库连接,堆栈上的窗口或文件。至少,这正是RAII允许您做的事情是可以说的,但是没有此事,您就不能。

raii的要点是,无论您如何退出范围,都将调用破坏者。

因此,无论您是正常退出还是通过投掷例外,您的资源将被释放。

btw,"资源"不必只是内存 - 它可以是文件句柄,数据库连接等。