首页 > 解决方案 > 堆栈与堆 - *vector 内的对象是否应声明为指针?

问题描述

如果我使用这条线

std:vector<MyObject>* vec = new std::vector<MyObject>(100);
MyObject obj1;
vec->push_back(obj1);

如果是这样,每个 MyObject 中的对象和原语呢?它们也应该被动态创建吗?

谢谢你

标签: c++heap-memorystdvectorstack-memory

解决方案


std:vector任何其他标准库容器一样,它会将元素复制到自身中,因此它拥有它们。因此,如果您有一个动态分配std::vector的元素,您.push_back()将被复制到由 管理的内存中std::vector,因此它们将被复制到堆上。

附带说明一下,在某些情况下,如果这样做是安全的,std::vector可能会move构成要素,但效果是一样的——最终,所有要素都在std::vector's 的管辖范围内。


推荐阅读