C++核心准则E.19:如果无法选择适当的资源句柄,使用final

    科技2024-05-12  80

    E.19: Use a final_action object to express cleanup if no suitable resource handle is available

    E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理

     

    Reason(原因)

    finally is less verbose and harder to get wrong than try/catch.

    和try/catch比起来,finally更加简练并不容易出错。

     

    Example(示例)

    void f(int n) { void* p = malloc(n); auto _ = finally([p] { free(p); }); // ... }

    Note(注意)

    finally is not as messy as try/catch, but it is still ad-hoc. Prefer proper resource management objects. Consider finally a last resort.

    finally不像try/catch那样凌乱,然仍然是针对具体问题的特殊对策。使用适当的资源管理对象的方式更好。将finally视为最后一招。

     

    Note(注意)

    Use of finally is a systematic and reasonably clean alternative to the old goto exit; technique for dealing with cleanup where resource management is not systematic.

    使用finally一种系统化、合理化的代替既有代码中goto exit的方式。使用这个技术可以处理资源没有被系统化管理的问题。

     

    Enforcement(实施建议)

    Heuristic: Detect goto exit;

    启发式的:检出goto exit;

     

    关于finally

    finally是gsl提供的一个支持函数,可以生成一个用户释放资源的清除动作。具体实现请参考以下链接:https://github.com/microsoft/GSL/blob/master/include/gsl/gsl_util

     

    原文链接

    https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e19-use-a-final_action-object-to-express-cleanup-if-no-suitable-resource-handle-is-available

     

    新书介绍

    以下是本人3月份出版的新书,拜托多多关注!

     

    本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

    对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

     


     

    觉得本文有帮助?请分享给更多人。

    关注微信公众号【面向对象思考】轻松学习每一天!

    面向对象开发,面向对象思考!

     

     

    Processed: 0.010, SQL: 8