Des*_*7es 2 c++ heap-memory stdvector stack-memory
如果我使用这条线
std:vector<MyObject>* vec = new std::vector<MyObject>(100);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)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管辖范围内。