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

c – 为什么std :: shared_ptr没有专门化?,第1张

概述我想知道为什么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 我想知道为什么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没有专门化?全部内容,希望文章能够帮你解决c – 为什么std :: shared_ptr没有专门化?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存