为什么没有专门的std :: shared

我想知道为什么动态数组由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


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

此外,你必须小心上传和下传,就像使用原始指针一样,以免调用未定义的行为。

unique_ptr对数组有直接的支持,所以当它知道它拥有一个指向数组的指针时,你不能向上或向下转换,并且默认的deleter调用delete[]

链接地址: http://www.djcxy.com/p/29241.html

上一篇: Why is there no specialisation for std::shared

下一篇: How does Apple count impressions of iAd banners?