gpt4 book ai didi

c++ - RAII 的有用性无一异常(exception)

转载 作者:可可西里 更新时间:2023-11-01 17:04:08 25 4
gpt4 key购买 nike

我最近在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com