C++ make_shared not available

前端 未结 1 531
既然无缘
既然无缘 2021-01-05 20:02

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

Can someone point me to a proper implementa

相关标签:
1条回答
  • 2021-01-05 20:37

    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:

    Without variadic template support:

    // 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)));
    }
    
    // ...
    

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

    With variadic template support:

    template <typename T, typename... Args>
    inline shared_ptr<T> make_shared(Args&&... args)
    {
      return shared_ptr<T>(new T( std::forward<Args>(args)... ));
    }
    
    0 讨论(0)
提交回复
热议问题