为什么没有专门的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[]
。