push_back 对象引用
Posted
技术标签:
【中文标题】push_back 对象引用【英文标题】:push_back object reference 【发布时间】: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&>.
【参考方案1】:
vector 的push_back
方法负责自己制作副本:来自C++ reference
在向量的最后一个元素之后添加一个新元素。 val 的内容被复制(或移动)到新元素。
所以在通话期间
estVect.push_back(element);
矢量与副本一起使用。因此没有问题。
【讨论】:
以上是关于push_back 对象引用的主要内容,如果未能解决你的问题,请参考以下文章
emplace_back() 和 push_back 的区别
STL:emplace_back() 和 push_back 的区别
学习 emplace_back() 和 push_back 的区别 emplace_back效率高
为什么emplace_back比push_back更快?快是有条件的