制作一对共享指针并推入向量

时间:2018-09-25 14:10:01

标签: c++ vector shared-ptr

我正在尝试制作一对共享指针,并将其推入列表中并出现错误。 错误在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)));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在尝试使用向量迭代器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。