首页 > 解决方案 > 如何将 shared_ptr 提供给应将各种数据类型添加到向量的模板函数?

问题描述

这个问题中,建议使用std::shared_ptr而不是std::unique_ptr. 但是,当将此共享指针提供给我的函数时,我无法完成这项工作:

 std::vector<std::unique_ptr<segment>> v3;

    //VERSION 5:
    auto myLine2 = std::make_shared<Line>(start, end);
    add_segment(v3, myLine2);

这是该函数的新实现:

template<typename T1, typename T2>
inline void add_segment(T1 & v, T2& line_or_circle)
{
    v.emplace_back(std::move(line_or_circle));
}

我在这里做错了什么?

标签: c++shared-ptr

解决方案


您不能将 a 中的事物“移动”到 ashared_ptr的实例中unique_ptr。如果可以的话,由于两个不同的智能指针在它们被释放时试图删除其中的东西,就会出现各种问题。

相反,只需将您的向量定义为:

std::vector<std::shared_ptr<segment>> v3;

然后,在那之后你真的不需要移动语义:

template<typename T1, typename T2>
inline void add_segment(T1 & v, T2& line_or_circle)
{
    v.emplace_back(line_or_circle);
}

推荐阅读