首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是std::vector使用push_back复制对象吗?

是std::vector使用push_back复制对象吗?
EN

Stack Overflow用户
提问于 2010-02-17 01:54:45
回答 6查看 127.9K关注 0票数 199

在对valgrind进行了大量研究之后,我得出结论: std::vector创建了您想要push_back的对象的副本。

这是真的吗?如果没有副本,向量就不能保留对象的引用或指针?!

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-17 01:57:46

是的,std::vector<T>::push_back()会创建参数的副本并将其存储在向量中。如果要在矢量中存储指向对象的指针,请创建一个std::vector<whatever*>而不是std::vector<whatever>

但是,您需要确保指针引用的对象仍然有效,而向量持有对它们的引用(智能指针利用RAII习惯用法解决了这个问题)。

票数 213
EN

Stack Overflow用户

发布于 2010-02-17 01:57:13

vector总是复制存储在向量中的任何内容。

如果您保留了一个指针向量,那么它将复制指针,但不会复制指针所指向的实例。如果你正在处理大对象,你可以(也许应该)总是使用一个指针向量。通常,出于安全目的,使用适当类型的智能指针向量是很好的,否则处理对象生存期和内存管理可能会很棘手。

票数 17
EN

Stack Overflow用户

发布于 2010-02-17 02:01:08

不仅std::vector会对您所推回的内容进行复制,而且集合的定义也会声明它会这样做,而且如果向量中没有正确的复制语义,就不能使用对象。因此,例如,您不能在向量中使用auto_ptr。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2275076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档