【发布时间】:2014-03-24 08:08:06
【问题描述】:
当我看到这段代码时,我想知道它会毫无问题地运行。
对象将通过引用传递,因此实际上它不是它的副本。 因此,如果您将此引用放入向量中并且对象超出范围,那么它应该不再可访问。
但确实如此。所以这个工作的唯一原因可能是push_back() 创建了引用对象的副本。这是这种行为的答案吗?
struct struct1 {
int value;
};
std::vector<struct1> testVect;
void pushVect(struct1 & element) {
testVect.push_back(element);
}
void fillVect() {
struct1 s1;
for (int i = 0; i < 10; i++) {
s1.value = i;
pushVect(s1);
}
}
【问题讨论】:
-
如果您read some documentation,它会告诉您
push_back进行了复制。 -
向量不存储引用。如果您查看
testVect的类型,您会注意到它是std::vector<struct1>,而不是std::vector<struct1&>.