为什么std :: unique_ptr需要专门用于动态数组?

时间:2014-06-23 11:53:40

标签: c++ visual-c++ c++11 clang template-specialization

我检查了VC ++ 2013和clang 3.4,发现两者都实现了std::unique_ptr如下:

template<class T, class DeleterType = std::default_delete<T>>
class unique_ptr
{
    // ...
};

template<class T, class DeleterType>
class unique_ptr<T[], DeleterType>
{
    // ...
};

std::default_delete能够确定T是否是数组类型。所以std::unique_ptr不需要专门处理数组的情况。此外,我发现class unique_ptr和专业class unique_ptr<T[], DeleterType>之间没有任何实质性差异,为什么会这样?

1 个答案:

答案 0 :(得分:3)

区别在于构造函数和reset() - unique_ptr<T>接受任何X*可转换为T*,而unique_ptr<T[]>只接受T*。考虑到数组的语义和限制,这是有道理的。

此外,unique_ptr<T[]>重载operator[],而unique_ptr<T>则不重载。