【问题标题】:push_back object referencepush_back 对象引用
【发布时间】: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&lt;struct1&gt;,而不是std::vector&lt;struct1&amp;&gt;.

标签: c++ vector reference


【解决方案1】:

vector 的push_back 方法负责自己制作副本:来自C++ reference

在向量的最后一个元素之后添加一个新元素。 val 的内容被复制(或移动)到新元素。

所以在通话期间

 estVect.push_back(element);

矢量与副本一起使用。因此没有问题。

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2014-09-13
    • 2021-05-08
    • 2011-01-17
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多