我检查了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>
之间没有任何实质性差异,为什么会这样?
答案 0 :(得分:3)
区别在于构造函数和reset()
- unique_ptr<T>
接受任何X*
可转换为T*
,而unique_ptr<T[]>
只接受T*
。考虑到数组的语义和限制,这是有道理的。
此外,unique_ptr<T[]>
重载operator[]
,而unique_ptr<T>
则不重载。