为什么std::make_unique
标准C ++ 11库中没有功能模板?我发现
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
有点冗长。以下内容会更好吗?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
这new
很好地隐藏了,只提及了一次类型。
无论如何,这是我尝试实现的make_unique
:
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
我花了很std::forward
长时间才可以编译这些东西,但是我不确定它是否正确。是吗?到底是什么std::forward<Args>(args)...
意思?编译器如何处理?
make_unique
使用自定义删除器进行参数化没有任何意义,因为显然它是通过Plain old进行分配的new
,因此必须使用Plain Old delete
:)
make_unique
仅限于new
分配...好吧,如果您想编写它就可以了,但是我可以看到为什么这样的东西不属于标准的一部分。
make_unique
由于的构造函数std::unique_ptr
是显式的,因此我喜欢使用模板,因此unique_ptr
从函数返回很冗长。另外,我宁愿使用而auto p = make_unique<foo>(bar, baz)
不是std::unique_ptr<foo> p(new foo(bar, baz))
。
unique_ptr
采用了您应该以某种方式允许的第二个模板参数-与有所不同shared_ptr
。