繁体   English   中英

谁能向我解释RAII的观点?

[英]Can anyone explain to me the point of RAII?

因此,如果我理解正确,RAII的目的就是消除内存管理的麻烦。 也就是说,您可以在对象的析构函数中进行删除。 这样,当指针超出范围时,您不必担心删除它。 所以这是我不明白的:为什么不首先在堆栈上声明变量?

您不能在堆栈上声明数据库连接或窗口或文件。 至少有争议的是,这正是RAII允许您执行的操作,但是没有它,您将无法执行。

您的理解有些错误:

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

  2. 当原始C ++指针超出范围时,它什么也不做。 我假设您在谈论的是智能指针,它不过是一个环绕原始指针的对象。 当该对象超出范围时,将调用其析构函数,然后可以依次使用析构函数释放在构造函数中分配的内存。

  3. 将需要“释放”的对象分配在堆栈还是堆上没有什么区别。 关键是,当您获取资源时,您可以在构造函数中执行某些操作,而在完成处理后,您可以在析构函数中执行其他操作。

RAII的要点是,无论您如何退出范围,都将调用析构函数。

因此,无论您是正常退出还是抛出异常 ,您的资源都将被释放。

顺便说一句,“资源”不必只是内存-它可以是文件句柄,数据库连接等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM