专栏首页C++核心准则原文翻译C++核心准则E.18:最小限度显式使用try/catch

C++核心准则E.18:最小限度显式使用try/catch

E.18: Minimize the use of explicit try/catch

E.18:最小限度显式使用try/catch

Reason(原因)

try/catch is verbose and non-trivial uses are error-prone. try/catch can be a sign of unsystematic and/or low-level resource management or error handling.

try/catch结构冗长,非平凡的用法容易出错。try/catch可以看作是非系统化和低层次资源管理或错误处理的信号。

Example, Bad(反面示例)

void f(zstring s)
{
    Gadget* p;
    try {
        p = new Gadget(s);
        // ...
        delete p;
    }
    catch (Gadget_construction_failure) {
        delete p;
        throw;
    }
}

This code is messy. There could be a leak from the naked pointer in the try block. Not all exceptions are handled. deleting an object that failed to construct is almost certainly a mistake. Better:

代码很凌乱。try代码块中的原始指针可能发生内存泄露。不是所有的异常都会被处理。删除一个构建失败的对象机会当然是一个错误。较好的做法:

void f2(zstring s)
{
    Gadget g {s};
}
Alternatives(其他选项)
  • proper resource handles and RAII
  • 正确使用资源句柄和RAII。
  • finally
  • finally处理
Enforcement(实施建议)

??? hard, needs a heuristic

很难,需要启发式提示。

原文链接 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e18-minimize-the-use-of-explicit-trycatch

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则E.31:正确排列catch子句

    catch-clauses are evaluated in the order they appear and one clause can hide ano...

    面向对象思考
  • C++核心准则编译边学-F.47 赋值运算符应该返回T&

    The convention for operator overloads (especially on value types) is foroperator...

    面向对象思考
  • C++核心准则ES.1: 标准库好于其他库和手写代码

    ES.1: Prefer the standard library to other libraries and to "handcrafted code"

    面向对象思考
  • Java 中的 try catch 影响性能吗?

    前几天在 code review 时发现有一段代码中存在滥用try catch的现象。其实这种行为我们也许都经历过,刚参加工作想尽量避免出现崩溃问题,因此在很多...

    陈树义
  • NLPer,你知道最近很火的自然语言处理库么?

    【磐创AI 导读】:本文介绍了最先进的自然语言处理库——PyTorch-Transformers

    磐创AI
  • 字节序: 一个不是很重要的概念

    我们将一个4字节的汉字存入一段4字节的物理容器里, 该怎么存放? 直觉都是从左往右依次写入, 但也可以从右向左写, 甚至可以先写入奇字节再写偶字节, 这样比划下...

    Jean
  • 链路追踪 SkyWalking 源码分析 —— Collector Storage 存储组件

    本文主要分享 SkyWalking Collector Storage 存储组件。顾名思义,负责将调用链路、应用、应用实例等等信息存储到存储器,例如,ES 、H...

    芋道源码
  • Linux 4.20 发布!35 万行代码都更新了啥?

    在经历几个版本的测试后,Linux粉丝翘首以待的Linux Kernel 4.20正式发布!这是Linux之父李纳斯Linus Torvalds重返Linux社...

    昱良
  • 语音消息技术实现技术实践

    消费升级的时代,搭配才能创造奇迹。文字是苍白的,语音是生动的,语音转文字是具备科技色彩的。文字一旦有了科技感,生活才能有质感。本课程以GME做“活化酶”,将详细...

    腾讯云大学
  • Linux-简介篇

    什么是Linux Unix Unix是一个强大的多用户、多任务操作系统。 于1969年在AT&T的贝尔实验室开发。 UNIX的商标权由国际开放标准组织(The ...

    一点博客

扫码关注云+社区

领取腾讯云代金券