gpt4 book ai didi

c++ - 为什么 std::shared_ptr 没有专门化?

转载 作者:可可西里 更新时间:2023-11-01 18:38:25 26 4
gpt4 key购买 nike

我想知道为什么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 直接支持数组,所以当它知道它持有一个指向数组的指针时,你不能向上或向下转换,默认删除器调用 delete[ ]

关于c++ - 为什么 std::shared_ptr<T[]> 没有专门化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com