【发布时间】:2012-04-28 18:43:52
【问题描述】:
考虑以下代码sn-p:
#include <vector>
using namespace std;
void sub(vector<int>& vec) {
vec.push_back(5);
}
int main() {
vector<int> vec(4,0);
sub(vec);
return 0;
}
假设“vec”没有剩余空间来存储“sub”函数中的5,它在哪里分配新内存?
在子函数的栈帧中?在这种情况下, 5 将在子函数的末尾被删除。但是主函数的栈帧不能增长,因为此时子函数的栈帧位于栈顶。
std::vector 是否为其在堆上的元素分配内存?
但是它是如何释放堆内存的呢?
如果是栈上的局部向量,包含该向量的函数的栈帧最后会被删除,而不通知向量将被删除?
【问题讨论】:
-
你可能想看看 STL 分配器。
-
sub(vector<int>& vec)称为sub(vec)肯定更容易阅读;) -
在堆上分配内存 std::vector Implementation
标签: c++ memory-management stl vector