考虑以下代码片段:
#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 是否为其在堆上的元素分配内存?但是它是如何释放堆内存的呢?如果它是堆栈上的本地向量,那么包含该向量的函数的堆栈帧最终会被删除,而不会通知向量它将被删除?