为什么std :: shared_ptr <t []>没有专门化?

时间:2015-09-22 22:18:16

标签: c++ c++11

我想知道为什么动态数组由std::unique_ptr<>直接支持,而不是由std::shared_ptr<>支持:

unique_ptr<int[]> ptr1(new int[n]); /// OK!
shared_ptr<int[]> ptr2(new int[n]); /// Incorrect: will not call delete[]

更新:我发现第二行可以改写为:

 shared_ptr<int> ptr2(new int[n], default_delete<int[]>());

现在我想知道幕后发生了什么,std::shared_ptr使用第二种方法,而不是类似于std::unique_ptr

1 个答案:

答案 0 :(得分:3)

使用shared_ptr时,如果使用delete[]分配数组,则必须使用调用new[]的自定义删除工具。

此外,您必须像使用原始指针一样注意向上和向下转换,以免调用未定义的行为。

unique_ptr直接支持数组,因此当它知道它拥有指向数组的指针时,你无法向上或向下转换,默认的删除器会调用delete[]