C++ make_shared not available

C++ make_shared not available

本文关键字:not available shared make C++      更新时间:2023-10-16

虽然我的编译器中有std::tr1::shared_ptr<T>可用,但我没有具有CCD_ 2。

有人能告诉我make_shared的正确实现吗?我明白了我需要使用varargs为T.的构造函数提供参数

但我的编译器中也没有可变的模板。

如果你的编译器没有给出make_shared的实现,并且你不能使用boost,并且你不介意对象和引用计数器都缺乏单一的分配优化,那么make_sshared就是这样的:

不支持可变模板

// 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值引用,那么为每个参数创建两个版本:一个const Arg&和一个Arg&

支持可变模板

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