make_unique的第三个“重载”的目的是什么?

时间:2013-12-01 14:42:05

标签: c++ c++11 unique-ptr c++14

根据N3797,std::make_unique有三个“重载”:

  

20.8.1.4 unique_ptr creation [unique.ptr.create]

     

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

     

1 备注:除非T不是数组,否则此函数不应参与重载决策。

     

2 返回: unique_ptr<T>(new T(std::forward<Args>(args)...))

     

template <class T> unique_ptr<T> make_unique(size_t n);

     

3 备注:除非T是未知范围的数组,否则此函数不应参与重载决策。

     

4 返回: unique_ptr<T>(new remove_extent_t<T>[n]())

     

template <class T, class... Args> unspecified make_unique(Args&&...) = delete;

     

5 备注:除非T是已知绑定的数组,否则此函数不应参与重载决策。

我不明白第三个删除重载的原因。如果T是已知边界的数组,则前两个不参与重载决策,那么为什么标准指定第三个?将它遗漏并仅指定前两个过载是不是完全相同?

编辑:请注意,我知道为什么不允许make_unique<T[N]>。问题不在于此,而是为什么需要第三次重载。 AFAICT,拥有或不拥有它的效果是相同的,甚至是make_unique<T[N]>

0 个答案:

没有答案