在 C 11 中,没有内置的 std::make_unique 函数,它允许简洁地实例化唯一指针。开发人员发现语法
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
过于冗长,并提出了一种替代语法:
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
这种方法简化了唯一指针的创建并减少了代码重复。
std::make_unique 的建议实现通过 std::forward 采用完美转发将参数传递给构造函数。完美转发确保函数参数以最有效的方式传递,保留其原始类型和值类别(例如左值、右值)。
在 make_unique 实现中,语法
std::forward<Args>(args)...
可以解释如下:
在一起,它们实现了完美通过确保参数以正确的值类别和类型传递给构造函数来进行转发。
Herb Sutter,C 主席标准化委员会已承认在 C 11 中未包括 std::make_unique 的监督,并表示将在未来版本中添加它。建议的实现与问题中提供的实现相同。
随着 C 14 的引入,std::make_unique 得到了标准化,为创建唯一指针提供了所需的简洁语法。
以上是`std::make_unique` 如何在 C 中实现完美转发?的详细内容。更多信息请关注PHP中文网其他相关文章!