专栏首页C++核心准则原文翻译C++核心准则C.150:unique_ptr管理的对象要用make_unique()​构建

C++核心准则C.150:unique_ptr管理的对象要用make_unique()​构建

C.150: Use make_unique() to construct objects owned by unique_ptrs

C.150:unique_ptr管理的对象要用make_unique()构建

Reason(原因)

make_unique gives a more concise statement of the construction. It also ensures exception safety in complex expressions.

make_unique提供了更简洁的构建语句。在复杂的表达式中,它也可以保证异常安全。

Example(示例)
unique_ptr<Foo> p {new Foo{7}};    // OK: but repetitive

auto q = make_unique<Foo>(7);      // Better: no repetition of Foo

// Not exception-safe: the compiler may interleave the computations of //arguments as follows:
//
// 1. allocate memory for Foo,
// 2. construct Foo,
// 3. call bar,
// 4. construct unique_ptr<Foo>.
//
// If bar throws, Foo will not be destroyed, and the memory-allocated //for it will leak.
f(unique_ptr<Foo>(new Foo()), bar());

// Exception-safe: calls to functions are never interleaved.
f(make_unique<Foo>(), bar());
Enforcement(实施建议)
  • Flag the repetitive usage of template specialization list <Foo>
  • 提示重复使用模板初始化列表的代码。
  • Flag variables declared to be unique_ptr<Foo>
  • 提示使用unique_ptr定义变量的情况。

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c150-use-make_unique-to-construct-objects-owned-by-unique_ptrs


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

关注【面向对象思考】轻松学习每一天!

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

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

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

原始发表时间:2020-02-23

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则C.130:实现多态类的深拷贝时,虚clone函数要比拷贝构造函数/赋值运算符好

    C.130: For making deep copies of polymorphic classes prefer a virtual clone func...

    面向对象思考
  • C++核心准则R.23: 使用make_unique构建unique_ptr

    For convenience and consistency with shared_ptr.

    面向对象思考
  • C++核心准则ES.12:不要在嵌套作用域中重复使用同样的名称

    It is easy to get confused about which variable is used. Can cause maintenance p...

    面向对象思考
  • 微信小程序组件化开发框架wepy学习(一)

    框架的产生必然是解决开发中的痛点,wepy解决了什么问题? 主要是对原生的开发进行了简化。原生开发中每一个页面要对应四种文件, 而且交互、 数据绑定都十分繁琐 ...

    Javanx
  • 1005. 继续(3n+1)猜想 (25)

    卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

    指点
  • 一步步debug搭建一个资源管理站点

    今晚找了github上的资源管理站点分享给大家,一步步示例搭建,基于Python2.7、redis3.0、MySQL5.7。需要安装的模块有Django、req...

    Python中文社区
  • 第二期-wepy安装

    简单介绍:wepy是一个微信小程序框架,支持模块化开发,开发风格类似Vue.js。可搭配redux使用,能同时打包出web和小程序。

    小团子
  • cocos2d-x 3.0的入门程序:helloworld

    看过了这么多不同方向的应用,发现很多程序入门都是helloworld helloworld是所有程序员的绝对初恋 先看一下程序的运行结果吧 ? 然后就是他...

    用户1624346
  • 大规模物联网网络的信息时代的相关随机接入(Information Theory)

    作为物联网(IoT)最著名的应用,远程监控的应用非常广泛。在这些监测应用中,信息越新鲜,价值越高。最近提出了一种新的度量标准,称为信息时代(AoI),用于量化各...

    李欣颖6837176
  • 微鲸:五年前的小米,五年后的蓝鲸

    昨日下午,微鲸科技在北京798召开了秋季新品发布会,正式推出他们的43吋新品电视“小钢炮”。 小而美的微鲸愈来愈像一只小蓝鲸,每天都在成长,仔细对比就会发现,...

    罗超频道

扫码关注云+社区

领取腾讯云代金券