2017-07-26 100 views
-5

我正想通性病的自我学习:: make_unique功能,我发现下面的声明在cppreference.com在C新型功能++ - 这是什么代码意味着

template< class T, class... Args > 
unique_ptr<T> make_unique(Args&&... args); 

我完全无法理解的签名上面的方法/功能。

+1

你的第二个问题使得这个问题太广泛了。你为什么试图学习每一个新功能? – Tas

+2

仅供参考:https://isocpp.org/files/papers/p0636r0.html – Tas

+0

否 - 并非所有,但至少他们是如何学习C++ 98同样我希望逐步提升我的技能到新的水平通过练习的一步练习,就像我学习C++ 98 – Prakash

回答

2

有在此声明中使用了许多 “新” 的特点:

基本上,代码的意思是“为任意类型的任意数量的参数声明一个函数模板并返回专用于给定类型T的unique_ptr”。另外,右值引用(& &)告诉您参数将被移动而不是被复制。

总之:make_unique<Type>(v)基本上与unique_ptr<Type>(new Type(v))相同。

+1

除了既方便又相当于C++ 11的std :: make_shared ',C++ 14的''std :: make_unique ''的主要价值在于异常处理语义更清晰''新''抛出与Ctor抛出。唯一的缺点是Visual Studio IntelliSense不如参数中那样有帮助。 –