在 C++ 中是否有模仿 Java try/finally 的常用习惯用法?

2024-03-28

从事 Java 工作很多年了,所以一直没有关注 C++。有finally子句是否已添加到语言定义中的 C++ 异常处理中?

有没有一种流行的模仿 Java 的 try/finally 的习惯用法?

我还担心 C++ 没有一个终极超类型来处理所有可能抛出的异常 - 就像 Java 的 Throwable 类。

我可以写:

try {
  // do something
} catch(...) {
  // alas, can't examine the exception
  // can only do cleanup code and perhaps rethrow, ala:
  throw;
}

附录编辑:

我最终接受了这个答案 得票最多,即使用 析构函数进行清理。当然, 从我自己的评论来看,很明显我 不完全同意这一点。 然而,C++ 就是这样,所以在 我的申请努力 介意,我或多或少会努力 坚持共同社区 实践。我将使用模板类 包装尚未拥有的资源 类析构函数(即 C 库 资源),从而赋予他们 析构函数语义。

新的附录编辑:

嗯,而不是finally然后是一个闭包 也许有特色?闭包结合 ScopeGuard 方法(请参阅其中之一 下面的答案)将是一种方法 任意完成清理 操作和清理权限 代码的外部范围上下文。清理可以按照 Ruby 编程中常见的惯用方式来完成,其中它们在打开资源时提供清理块。不是一个 正在考虑的闭合功能 C++?


通过有效地使用析构函数。当在 try 块中引发异常时,在其中创建的任何对象都将立即被销毁(因此调用其析构函数)。

这与 Java 不同,在 Java 中,您不知道何时调用对象的终结器。

UPDATE: 直接从马嘴里说出来:为什么 C++ 不提供“finally”结构? http://www.research.att.com/~bs/bs_faq2.html#finally

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中是否有模仿 Java try/finally 的常用习惯用法? 的相关文章

  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • 泛型与接口的实际优势

    在这种情况下 使用泛型与接口的实际优势是什么 void MyMethod IFoo f void MyMethod
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 如何从 List 中的字符串中删除数字/数字?

    我有一个字符串列表 List
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 将列表(对象)转换为列表(字符串)

    有没有办法转换List of Object to a List of String 在 c 或 vb net 中而不迭代所有项目 幕后迭代很好 我只想要简洁的代码 Update 最好的方法可能就是进行新的选择 myList Select f
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

    include
  • System.diagnostics.process 进程在托管后无法在 IIS 上运行?

    我正在尝试从网络应用程序安装 exe 当我在本地运行应用程序 从 asp 开发服务器 时 它安装正确 但当我托管在 IIS 上时 它不起作用 我在asp net页面的Page load方法上编写了这段代码 想要在客户端计算机上安装Test
  • 如何使用 libpq 获取双精度值?

    The examples http www postgresql org docs 9 3 interactive libpq example htmllibpq 文档中展示了如何通过将整数值转换为主机字节序表示来获取整数值 我很好奇必须做
  • 如何单独捕获这些异常?

    我正在编写一个与 Quickbooks 交互的 Python 程序 连接到 Quickbooks 时 根据问题的不同 我可能会遇到以下两个常见异常之一 pywintypes com error 2147352567 Exception oc
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码

随机推荐

  • 如何在没有 jQuery 的情况下模拟 ajaxStart 和 ajaxStop?

    我一直在查看 jQuery 代码 但它有点庞大 这是一件容易的事吗 知道怎么做吗 我想要这样做的原因是因为我不想将它用于网页 而是用于 C 应用程序 该应用程序需要知道何时有 ajax 活动在网页浏览器 http msdn microsof
  • 如何使用php使用多个数据库?

    我在互联网上阅读了多个问题 包括这个堆栈溢出问题 https stackoverflow com questions 274892 how do you connect to multiple mysql databases on a si
  • D3.js - 如何添加具有默认滚轮鼠标缩放行为的缩放按钮

    因此 我使用默认的 d3 behavior zoom 获得了带有鼠标缩放的世界地图 并进行了限制以防止地图被完全拖出页面 开始工作时很痛苦 但现在可以了 我现在的问题是 这个项目还需要界面中无用的缩放 和 按钮 并且我找不到具有两种缩放类型
  • 使用 JQuery 进行本地化?

    我不知道如何使用 JQuery 处理本地化 我想设置一个innerHTML使用德语文本 但如果浏览器配置为使用英语 那么我想设置英语文本 在 PHP 中 我使用 gettext 来完成此类操作 但是如何在 JavaScript jQuery
  • Automapper:检查 MapFrom 中的 null

    使用版本 4 制作地图时如何检查 null 我尝试过 Value 但那不存在于Null Mapper CreateMap
  • 我应该如何在 Java 中为 Android 手机实现准确的音高检测?

    我想开发一个应用程序 需要通过 Android 手机的麦克风对乐器进行精确的音高检测 我读到的大多数建议都涉及使用快速傅里叶变换 FFT 但他们提到它在准确性和处理能力方面存在问题 考虑到它应该在智能手机上顺利运行 一个答案建议误差幅度为
  • net-snmp解析代码,如何解析MIB?

    我在学习代码库 解析MIB In parse c and parse h代码保留一个哈希桶 indexed bucket tree list 还有一个树结构 其中包含一个指向的next指针Next node in hashed list o
  • a*b* 是正则吗?

    I know anbn for n gt 0 is not regular by the pumping lemma but I would imagine a b to be regular since both a b don t ha
  • .NET Framework 上的 System.Numerics.Vector 初始化性能

    System Numerics Vector 为 NET Core 和 NET Framework 带来了 SIMD 支持 它适用于 NET Framework 4 6 和 NET Core Baseline public void Sim
  • Google Apps 脚本是否支持外部 IDE?

    我正在使用 Google Apps 脚本 想知道是否可以使用 Google 提供的编辑器之外的任何类型的编辑器 我购买了 Sublime Text 并且想使用它 Google 提供的那个很恶心 文本很小 尽管我有一个巨大的屏幕和语法颜色 我
  • Android 单选按钮

    我在 Android 中有一个单选按钮组 看起来像 选择颜色 Red Blue Orange Green 我需要选择单选按钮及其值 我在 radiogroup 中以这种方式有 4 个单选按钮rg rb1a RadioButton findV
  • Chrome CLI 的参数 --virtual-time-budget 的真正含义是什么?

    我知道该论点的文档 virtual time budget 在源中 https cs chromium org chromium src headless app headless shell switches ccChromium 但我觉
  • Zend Framework 3 中的 GetServiceLocator

    早上好 我一直在学习使用框架 Zend Framework 进行编程 根据我过去的经验 我使用的是骨架应用程序 v 2 5 也就是说 我过去开发的所有模块都围绕 ServiceManager 的 servicelocator 工作 有没有办
  • 如何在Android中的WebView中永久突出显示文本?

    我正在为 Android 手机开发 ePUB 阅读器 我可以使用 WebView 和 ClipBoardManager 将文本复制到 ClipBoard 但我真正想做的是永久突出显示该选择 我看到一些文章 他们建议让 WebView 处于选
  • Windows 客户端(而非 Web 应用程序)打印的最佳方式?

    从 c net 打印内容的最佳方法是什么 问题涉及单页以及包含大量页面的报告 如果能获得最常见的打印库的列表 其中包含每个库的主要功能和陷阱 那就太好了 更新 适用于标准 Windows 客户端 或服务器 不适用于网络应用程序 对于报告 我
  • 从数组和频率创建哈希

    我有一个数组 1 2 4 5 4 7 我想找到每个数字的频率并将其存储在哈希中 我有这段代码 但它返回NoMethodError undefined method for nil NilClass def score array hash
  • Python默认参数评估[重复]

    这个问题在这里已经有答案了 我正在阅读 Python 文档版本 2 7 10 中的 python 教程 我遇到了类似的内容 Code def fun1 a L L append a return L print fun1 1 print f
  • java.lang.IllegalArgumentException:未找到命名查询:

    我得到以下代码 Stateless public class BondecomandeDAO PersistenceContext private EntityManager em public Bondecommande findBCby
  • 检测 iframe 对象中的 src/位置更改

    我有一个 iframe 对象指向特定页面 例如 我希望每当 iframe 的位置发生变化时都会收到警报 因为用户单击了其中的链接 Doing onLoad alert this ContentWindow location href 什么也
  • 在 C++ 中是否有模仿 Java try/finally 的常用习惯用法?

    从事 Java 工作很多年了 所以一直没有关注 C 有finally子句是否已添加到语言定义中的 C 异常处理中 有没有一种流行的模仿 Java 的 try finally 的习惯用法 我还担心 C 没有一个终极超类型来处理所有可能抛出的异