【发布时间】:2018-05-30 16:00:37
【问题描述】:
我确实需要在 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,"(或类似的大负数)。
问题出在哪里?
【问题讨论】:
-
你认为你为什么需要这样做?
-
@NeilButterworth 好吧,因为他们(这是学校作业)正在测试该功能并期待此回报。
-
@StoryTeller 是的,我通常会很乐意使用它,但我现在没有选择。
-
允许使用标准库的学校作业?但不是你真正需要的部分?好吧,我猜你的作业做错了。
标签: c++ pointers vector reference unique-ptr