Dan*_*rey 5 c++ unique-ptr c++11 c++14
根据N3797,std::make_unique有三个"过载":
20.8.1.4 unique_ptr创建[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>unspecifiedmake_unique(Args&&...) = delete;5 备注:除非
T是已知绑定的数组,否则此函数不应参与重载决策.
我不明白第三个删除重载的原因.如果T是已知边界的数组,前两个不参与重载决策,那么为什么标准指定第三个?将它遗漏并仅指定前两个过载是不是完全相同?
编辑:请注意,我知道为什么make_unique<T[N]>不允许.问题不在于此,而是为什么需要第三次重载.AFAICT,拥有或不拥有它的效果是相同的,甚至是wrt make_unique<T[N]>.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |