c++ - 如何将 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));
}
我在这里做错了什么?
解决方案
您不能将 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);
}
推荐阅读
- c++ - #include < > 如何访问库?
- c++ - 使用 C++ 读取具有多列的文本文件
- python - 无法使用网格搜索检索 bestModel
- c# - 从文本文件中提取特定字符串
- flutter - 如何遍历列表以填充 Flutter 和 Dart 中的表格?
- c++ - 将元素插入数组排序顺序
- python - 如何从网站获取 JSON 数据但响应无
- javascript - 在同一窗口中打开 Google 协作平台 HTML 链接
- tableau-api - Tableau LOD 问题(如何使用忽略一个过滤器但保留其他过滤器的总数百分比?)
- google-chrome-devtools - 使用 Chrome 开发工具代码折叠快捷方式