专栏首页C++核心准则原文翻译C++核心准则ES.24: 使用unique_ptr<T>管理指针

C++核心准则ES.24: 使用unique_ptr<T>管理指针

ES.24: 使用unique_ptr<T>管理指针

Reason(原因)

Using std::unique_ptr is the simplest way to avoid leaks. It is reliable, it makes the type system do much of the work to validate ownership safety, it increases readability, and it has zero or near zero run-time cost.

使用std::unique_ptr是避免泄露的最简单方法。它可靠,它使类型系统做更多的工作以便安全地验证所有权,它可以增加可读性,它的没有(或接近没有)运行时代价。

Example(示例)

void use(bool leak)
{
    auto p1 = make_unique<int>(7);   // OK
    int* p2 = new int{7};            // bad: might leak
    // ... no assignment to p2 ...
    if (leak) return;
    // ... no assignment to p2 ...
    vector<int> v(7);
    v.at(7) = 0;                    // exception thrown
    // ...
}

If leak == true the object pointed to by p2 is leaked and the object pointed to by p1 is not. The same is the case when at() throws.

如果leak==true,p2指向的对象就会发生泄露,但p1指向的对象就不会。at()抛出异常时也一样。

Enforcement(实施建议)

Look for raw pointers that are targets of new, malloc(), or functions that may return such pointers.

寻找new,malloc的结果直接赋值个原始指针,或者函数返回这样的指针的情况。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es24-use-a-unique_ptrt-to-hold-pointers

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

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

原始发表时间:2020-04-27

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则F.52:在lambda表达式中使用引用形式捕捉局部变量

    F.52 在lambda表达式中使用引用形式捕捉局部变量,包含向算法传递变量的情况。

    面向对象思考
  • C++核心准则T.13:对于简单的,单类型参数概念,使用缩略记法更好

    Readability. Direct expression of an idea.

    面向对象思考
  • C++核心准则E.6:使用RAII防止资源泄露

    Leaks are typically unacceptable. Manual resource release is error-prone. RAII (...

    面向对象思考
  • 填坑系列(3):扒一扒NVIDIA Tegra Linux 驱动包 (L4T) 32.1里的那些坑

    这个文档里很清楚地描述了目前已知的几个问题(也就是坑),我这里专门挑出跟Jetson NANO相关的,希望用户们在使用过程中注意。当然随着版本的更新,这些问题(...

    GPUS Lady
  • 视频 | 如何构建链路追踪 SkyWalking 5.x 的源码并运行

    来源:https://github.com/JaredTan95/skywalking-tutorials

    芋道源码
  • Gym 100952C&&2015 HIAST Collegiate Programming Contest C. Palindrome Again !!【字符串,模拟】

    C. Palindrome Again !! time limit per test:1 second memory limit per test:64 meg...

    Angel_Kitty
  • HDUOJ---2642Stars(二维树状数组)

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Jav...

    Gxjun
  • Codeforces 833E Caramel Clouds

    E. Caramel Clouds time limit per test:3 seconds memory limit per test:256 megaby...

    Angel_Kitty
  • TGM Plugin Activation:为WordPress 主题添加“插件推荐安装”功能

    TGM Plugin Activation 是一个php库,通过TGM Plugin Activation 可以很方便的在你开发的主题上集成“插件推荐安装”功能...

    Jeff
  • 如何实现SAP WebClient UI附件批量上传

    Recently several customers have asked for multiple attachment upload functionali...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券