首页 > 后端开发 > C++ > 为什么 C 11 中缺少 `std::make_unique`,以及完美转发如何增强其功能?

为什么 C 11 中缺少 `std::make_unique`,以及完美转发如何增强其功能?

Patricia Arquette
发布: 2024-12-14 01:33:10
原创
938 人浏览过

Why Was `std::make_unique` Missing from C  11, and How Does Perfect Forwarding Enhance Its Functionality?

make_unique 和完美转发

为什么 C 11 中没有 std::make_unique?

尽管有减少冗长和有助于类型安全的优点, std::make_unique 未包含在 C 11 标准中。 C 标准化委员会主席 Herb Sutter 将这种遗漏归因于疏忽。

std::forward 和完美转发解释

在用户定义的 make_unique 实现中,std::forward

Args>(args)... 用于将参数完美转发到 T 的构造函数。此技术确保参数作为最优右值(或左值)传递引用。

当 std::forward 应用于左值引用时,它将其转换为右值引用,允许构造函数直接绑定到右值。相反,如果 std::forward 应用于右值引用,则它不会执行任何操作。

实现详细信息

make_unique 实现通过使用 new T 分配内存然后调用来创建 T 的新实例它的构造函数带有转发的参数。使用完美转发可以防止不必要的复制或不必要的临时对象。

结论

尽管不是 C 11 的一部分,std::make_unique 已成为一种广泛采用的约定,用于简洁地创建唯一指针。它增强了代码可读性,简化了类型处理,并确保了高效的资源管理。它预期包含在 C 14 中,进一步强调了它在现代 C 编程中的重要性。

以上是为什么 C 11 中缺少 `std::make_unique`,以及完美转发如何增强其功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

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