У меня есть цикл, в котором я создаю unique_ptr и перемещаю его в вектор. Мне также нужно сохранить его в другом векторе, поэтому я сохраню ссылку на него в другом векторе, используя метод end()
первого вектора.
По какой-то причине у меня возникли некоторые недопустимые ошибки чтения, которые, кажется, влияют на элемент перед последним списком, содержащим ссылки.
Вот простой фрагмент, иллюстрирующий мои высказывания:
#include <iostream>
#include <memory>
#include <vector>
int main(void)
{
std::vector<std::unique_ptr<int>> other;
std::vector<std::reference_wrapper<std::unique_ptr<int>>> vec;
for (int it = 0; it < 2; ++it)
{
std::unique_ptr<int> ptr = std::make_unique<int>(it);
other.push_back(std::move(ptr));
vec.push_back(*(other.end() - 1));
}
for (auto &it : vec)
std::cout << "Vec: " << *it.get() << std::endl;
return 0;
}
Это выведет что-то вроде этого:
$ ./a.out
Vec: 35716160
Vec: 1
Как вы видите, первый элемент содержит мусор, я подозреваю, что нажатие на end()
первого вектора вызывает проблему, но я не могу понять, почему.