首页 >后端开发 >C++ >为什么 C 11 中缺少 `std::make_unique`,以及完美转发在其实现中如何工作?

为什么 C 11 中缺少 `std::make_unique`,以及完美转发在其实现中如何工作?

DDD
DDD原创
2024-12-30 00:30:12588浏览

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique 和完美转发

问:为什么 C 11 标准库中缺少集中式 make_unique 函数?

许多人找到了构造样板unique指针不方便。例如:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));

像这样的光滑函数将是首选:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

问:这是一个 make_unique 实现尝试,但有关 std::forward 的某些内容似乎已损坏。它在做什么以及应该如何使用?

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

答:C 11 中 std::make_unique 的遗漏被认为是一个疏忽:它是在 C 14 中添加的。

std::forward(args) 表达式采用完美转发来生成对参数 ...args 的人工引用,从而允许转发它们到 T(std::forward(args)...) 中的新表达式并统一左值和右值的构造行为。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn