std::pair
의 std::vector
을 내부적으로 참조 (&
)로 작성해야하지만 push_back
참조 값을 시도하면 기능이 중단됩니다. 디버깅 후 참조 주소가 unique_ptr
내부의 주소와 다르다는 것을 알았지 만 값은 동일합니다.벡터 내부에 참조와 쌍을 가질 수 있습니까?
벡터에 삽입하는 함수 (여기서는 foo())를 사용할 때 참조하는 값은 정확하지만 주소는 여전히 일치하지 않습니다.
#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 << "\n";
}
이 코드는 문제를 보여줍니다 - 대신 "2: 1,0,"
의 그것은 "2: -342851272,0,"
(처음부터 또는 유사한 큰 음수)를 출력한다.
어디에 문제가 있습니까?
['std :: reference_wrapper'] (http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper) – StoryTeller
왜 그렇게해야한다고 생각하십니까? –
@NeilButterworth 글쎄, 그들은 (그것의 학교 임무이기 때문에) 함수를 테스트하고이 반환을 기대하고 있습니다. – Davar