Создание пары общих указателей и вставка вектора - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать пару общих указателей, вставить их в список и получить ошибку.Ошибка в строке 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 голосов
/ 25 сентября 2018

Вы пытаетесь создать пару из векторных итераторов: 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.

...