尽管有减少冗长和有助于类型安全的优点, std::make_unique 未包含在 C 11 标准中。 C 标准化委员会主席 Herb Sutter 将这种遗漏归因于疏忽。
在用户定义的 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中文网其他相关文章!