微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shared_ptr 和 unique_ptr 构造函数

如何解决shared_ptr 和 unique_ptr 构造函数

当我使用智能指针时,我总是需要用工厂函数来构造它,例如std::make_shared<T>std::make_unique<T>,我不使用带指针的构造函数,因为我试图避免 new 的任何用法/外观。但我的问题是为什么 C++ 标准没有包含一个将参数列表转发到类型 T 的构造函数?就像不是 shared_ptr<T> make_shared(Args&&...),我们可以有以下:

shared_ptr<T>::shared_ptr(Args&&...) {...}
unique_ptr<T>::unique_ptr(Args&&...) {...}

解决方法

基本上是为了避免歧义和混淆。

歧义的产生是因为 barplot(10:1) text(x = 1:10,y = par("usr")[3] - 0.45,labels = LETTERS[1:10],xpd = NA,srt = 45,cex = 1,adj = 1) ## srt is for rotating labels 有超过 10 个构造函数重载,而 std::shared_ptr 也有六个,其中很多是模板。因此,添加一个旨在将参数转发给托管对象的方法将导致编译器无法选择其含义或无法访问托管对象的某些构造函数。

即使以某种方式避免了歧义,也可能会混淆用户。这是因为 std::unique_ptr 构造函数用于构造 shared_ptr 对象,而 shared_ptr 用于创建由 make_shared 管理的对象。

这些工厂的想法不是要摆脱代码中 shared_ptr 的出现。从 new 获取其值的 shared_ptr 管理资源的方式与从其中一个构造函数获取其值的 make_shared 不同。摆脱 shared_ptr 只是令人愉快的副产品,但我们仍然需要这些构造函数(例如用于设置删除器),因此在代码中区分它可以简化阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。