c++ - 堆栈与堆 - *vector 内的对象是否应声明为指针?
问题描述
如果我使用这条线
std:vector<MyObject>* vec = new std::vector<MyObject>(100);
- 如果我在堆栈中创建 MyObject 并将它们添加到向量中,它们会保留在堆栈中,对吗?
MyObject obj1; vec->push_back(obj1);
因此,如果它进入堆栈,那么添加到向量中的 MyObject 在方法结束后会消失吗?我在向量里面会有什么比?垃圾?
我应该改用这个吗?:
std:vector<MyObject*>* vec = new std::vector<MyObject*>(100);
如果是这样,每个 MyObject 中的对象和原语呢?它们也应该被动态创建吗?
谢谢你
解决方案
与std:vector
任何其他标准库容器一样,它会将元素复制到自身中,因此它拥有它们。因此,如果您有一个动态分配std::vector
的元素,您.push_back()
将被复制到由 管理的内存中std::vector
,因此它们将被复制到堆上。
附带说明一下,在某些情况下,如果这样做是安全的,std::vector
可能会move
构成要素,但效果是一样的——最终,所有要素都在std::vector
's 的管辖范围内。
推荐阅读
- jenkins - 带有 containerd 的 Jenkins Kubernetes 插件
- android - 停止动画 Drawable
- c++ - Union-Find leetcode 超过时限的问题
- python-3.x - 使用 Python 从 Google 检索第一个搜索结果
- apache-spark - 错误 KeyProviderCache:找不到带有密钥 [dfs.encryption.key.provider.uri] 的 uri 来创建 keyProvider
- neo4j - 合并和在neo4j中的位置
- java - 序列生成器:JAVA/JPA/SPRING
- excel - 在 VBA 的工作簿命令中使用变量名称
- c# - 如何使用 .NET SDK 背后的代码执行 U-SQL 作业
- javascript - 每次按下 Textinput 时都会调用 TouchableOpacity