I really need to make std::vector
of std::pair
with reference (&
) inside, but it breaks inside the function when I try to push_back
reference value. After debugging I discovered, that the address of reference is different from the address inside unique_ptr
(but the value is the same).
When I don't use (here the foo()) any function that insert into vector it's the value it refers to is correct, but the addresses still don't match.
#include <iostream>
#include <memory>
#include <iterator>
#include <string>
#include <vector>
void foo(std::vector<std::pair<const int&, int> >& vector,
std::unique_ptr<int>& ptr) {
vector.push_back(std::make_pair<const int&, int>(*ptr, 11));
}
int main() {
std::vector<std::pair<const int&, int> > v;
std::unique_ptr<int> i = std::make_unique<int>(1);
std::unique_ptr<int> b = std::make_unique<int>(0);
foo(v, i);
v.push_back(std::make_pair<const int&, int>(*b, 10));
std::cout << v.size() << ": ";
for (auto x : v) {
std::cout << x.first << ",";
}
std::cout << "
";
}
This code demonstrates the problem - instead of "2: 1,0,"
it outputs "2: -342851272,0,"
(or similar big negative number in the first place).
Where is the problem?
See Question&Answers more detail:os