使用libc我在公共部分找到std :: shared_ptr :: make_shared()静态成员函数.当我已经定义了类型别名std :: shared_ptr的专业化时,这是非常方便的:
using T = int; using P = std::shared_ptr< T >; auto p = P::make_shared(123); // <=> std::make_shared< T >(123) static_assert(std::is_same< decltype(p),P >::value);
我担心标准合规性,因为来自可信源的文章(1,2)没有提到std :: shared_ptr的静态成员函数make_shared.
现在使用的功能是不好的吗?为什么?
解决方法
使用此静态make_shared成员函数时,您将依赖于g /标准库的实现特定扩展.为了从中获得一点收益,我宁愿保持我的代码可移植,并使用std :: make_shared.
对于您提到的情况,即使用现有的复制或移动构造函数构建新对象,我可以提出一种替代方法(未经测试;对于C 11兼容性,您必须添加尾随返回类型):
template <typename T> auto share_ptr_to_new(T&& v) { using T2 = typename std::remove_reference<T>::type; return std::make_shared<T2>(std::forward<T>(v)); }
在上面的例子中,你可以写自动p = share_ptr_to_new(123).
原文地址:https://www.jb51.cc/c/114293.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。