Push_back对象引用

push_back object reference

本文关键字:对象引用 back Push      更新时间:2023-10-16

当我看到这段代码时,我想知道它是否会正常运行。

对象将通过引用传递,所以实际上它不是它的副本。如果你把这个引用放入一个向量,而这个对象超出了作用域,那么它就不应该再被访问了。

但确实如此。因此,这工作的唯一原因可能是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);
    }
}

vector的push_back方法负责自己复制:来自c++参考

在vector对象的最后一个元素之后,在vector对象的末尾添加一个新元素。val的内容被复制(或移动)到新元素中。

在调用

期间
 estVect.push_back(element);

vector与副本一起工作。所以没有问题。