制作一对共享指针并推送一个向量
Making a pair of shared pointer and pushing in a vector
我正在尝试制作一对共享指针并将其推送到列表中并得到错误。 错误出在行list_of_objects_combination.push_back()
我的代码出了什么问题?
没有用于调用的匹配函数 'Objects::Objects(__gnu_cxx::__normal_iterator*, std::vector>>&(' { ::new((void *(__p( _Up(std::forward<_Args>(__args(...(; }
void MyClass::getCombination(std::vector<std::shared_ptr< Objects>> m_list_objects,
std::vector<std::pair<std::shared_ptr<Objects>, std::shared_ptr<Objects>>> &list_of_objects_combination) {
std::vector<std::shared_ptr< Objects>>::const_iterator objectIterator = m_list_objects.begin();
std::vector<std::shared_ptr<Objects>>::const_iterator objectIteratorNext;
for (; objectIterator < m_list_objects.end(); objectIterator++) {
for (objectIteratorNext = objectIterator + 1; objectIteratorNext < m_list_objects.end();
objectIteratorNext++) {
list_of_objects_combination.push_back(std::make_pair(std::make_shared<Objects>(objectIterator),
std::make_shared<Objects>(objectIteratorNext)));
}
}
}
您正在尝试从向量迭代器制作一对:std::make_shared<Objects>(objectIterator)
,而不是 Objects/shared_ptrs。试试std::make_pair(*objectIterator, *objectIteratorNext)
。这样,您将避免代码中的另一个错误,因为您尝试对现有对象进行新shared_ptr
,而不是复制现有对象。目前,即使std::make_shared<Objects>(objectIterator)
std::make_shared<Objects>(objectIterator->get())
也会创建具有单独引用计数的新shared_ptrs,这将导致双重删除/UB。
相关文章:
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为什么一个向量上的多线程操作很慢
- 将一个向量插入另一个向量的某个位置
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 如何按另一个向量的方向调整一个向量?
- 将字符向量复制到另一个向量
- 制作一对共享指针并推送一个向量
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- 大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 如何将所有指针从一个向量移动到另一个向量?
- 将一个向量映射到不同的对,即使向量映射到每对时是不同的?
- 生成一个类Name_class并将两种数据类型存储在一个向量中
- 使用步骤c++构建一个向量
- 如何从另一个向量中的另一个第一元素减去向量中的第一元素
- 将一个向量对放在一个无序映射与一个映射中