加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – shared_ptr的静态成员函数make_shared

发布时间:2020-12-16 05:35:46 所属栏目:百科 来源:网络整理
导读:使用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
使用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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读