C ++ make_shared不可用 [英] C++ make_shared not available

查看:235
本文介绍了C ++ make_shared不可用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

虽然我在编译器中有 std :: tr1 :: shared_ptr< T> ,但我不
make_shared c>。

While I have std::tr1::shared_ptr<T> available in my compiler, I don't have make_shared.

有人可以指示我正确实施 make_shared 吗?我看到
,我需要使用varargs为T的构造函数提供参数。

Can someone point me to a proper implementation of make_shared? I see that I need to use varargs to provide arguments to constructor of T.

但我没有可变参数模板在我的编译器也可用。

But I don't have variadic templates available in my compiler as well.

推荐答案

如果你的编译器没有给出make_shared的实现,你不能使用boost,缺少对对象和引用计数器的单分配优化然后make_shared是这样的:

If your compiler don't give an implementation of make_shared and you can't use boost, and you don't mind the lack of single-allocation optimization both for the object and the reference counter then make_shared is something like this:

没有可变模板支持

// zero arguments version
template <typename T>
inline shared_ptr<T> make_shared()
{
  return shared_ptr<T>(new T());
}

// one argument version
template <typename T, typename Arg1>
inline shared_ptr<T> make_shared(Arg1&& arg1)
{
  return shared_ptr<T>(new T(std::forward<Arg1>(arg1)));
}

// two arguments version
template <typename T, typename Arg1, typename Arg2>
inline shared_ptr<T> make_shared(Arg1&& arg1, Arg2&& arg2)
{
  return shared_ptr<T>(new T(std::forward<Arg1>(arg1),
                             std::forward<Arg2>(arg2)));
}

// ...

不支持r值引用,则为每个参数计数生成2个版本:一个 const Arg& 和一个 arg&

If your compiler don't support r-value references, then make 2 versions for each arguments count: one const Arg& and one Arg&

使用可变参数模板支持

template <typename T, typename... Args>
inline shared_ptr<T> make_shared(Args&&... args)
{
  return shared_ptr<T>(new T( std::forward<Args>(args)... ));
}

这篇关于C ++ make_shared不可用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆