gpt4 book ai didi

C++ make_shared 不可用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:15 30 4
gpt4 key购买 nike

虽然我有std::tr1::shared_ptr<T>在我的编译器中可用,我不有make_shared .

谁能告诉我如何正确实现 make_shared ?我懂了我需要使用可变参数来为 T 的构造函数提供参数。

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

最佳答案

如果您的编译器不提供 make_shared 的实现并且您不能使用 boost,并且您不介意缺少针对对象和引用计数器的单一分配优化,那么 make_shared 是这样的:

不支持可变参数模板:

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

// ...

如果您的编译器不支持右值引用,则为每个参数计数制作 2 个版本:一个 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)... ));
}

关于C++ make_shared 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135144/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com