我最近在 c++ 中发现了 RAII,大多数 RAII 的例子都在谈论异常安全。如何在抛出异常时始终释放资源。
我的问题是,如果您没有打开异常,RAII 是否值得。在我们公司,我们从事 arm 的嵌入式项目,默认情况下异常是关闭的,我们认为没有任何必要。
谢谢大家的回答!
最佳答案
有异常(exception)的 RAII 基本上是一项要求。
无异常(exception)的 RAII 意味着您可以将资源分配与代码结合起来以处置资源。
这让您拥有具有多个导出点的函数,简化了析构函数的编写(RAII 繁重环境中的析构函数通常为空或默认),可以简化对象分配和移动(再一次,通常为空或默认有足够的 RAII 工作).
嵌入式环境的一个典型例子是锁定和解锁一些互斥量。你想保证你不会锁定互斥锁而忘记解锁它。为此,代码纪律意味着您的函数基本上必须有一个退出点,并且有时您必须进行体操以确保这一点发生。
使用 RAII,您只需创建一个拥有锁的 RAII 资源持有者。现在您可以随时返回,解锁资源的代码会自动注入(inject)返回站点。代码流得到简化,资源泄漏也不太常见。
RAII 也是很棒的文档。具有 Foo*
的结构或类可能意味着任何事情:您应该如何以及何时处理该资源尚不清楚。具有 std::unique_ptr<Foo>
的结构或类显然拥有该指针。采用 std::unique_ptr<Foo>
的函数显然正在接管传入的指针的所有权。返回 std::unique_ptr<Foo>
的函数显然是给你该指针的所有权。
关于c++ - RAII 的有用性无一异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708564/