首页 > 后端开发 > C++ > 尽管'std::make_unique”很复杂,但为什么它对 C 来说是一个有价值的补充?

尽管'std::make_unique”很复杂,但为什么它对 C 来说是一个有价值的补充?

DDD
发布: 2024-12-16 06:06:16
原创
630 人浏览过

Why is `std::make_unique` a valuable addition to C   despite its complexity?

std::make_unique:缺少标准库的便利

C 11 标准库缺少 std::make_unique 函数模板,导致开发人员需要编写冗长的代码来创建独特的指针。考虑以下示例:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
登录后复制

为了减轻这种冗长,一些开发人员提出了 make_unique 函数:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
登录后复制

此语法隐藏了 new 运算符并仅提及一次类型。

但是,实现这样的功能需要了解完美转发的复杂性。具体来说,std::forward表达式:

std::forward<Args>(args)...
登录后复制

涉及以下操作:

  • std::forward是一个类型转换表达式,它将 Args 的任何左值或右值引用转发到结果。
  • std::forward(args) 是一个函数调用表达式,它通过转发 args 中的相应参数来推导和构造 Args。
  • ... 将转发的参数解压到参数包中。

总而言之, std::forward(args)... 允许将参数完美转发给构造函数。

以上是尽管'std::make_unique”很复杂,但为什么它对 C 来说是一个有价值的补充?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板