请考虑以下代码段:
#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;
}
Run Code Online (Sandbox Code Playgroud)
假设"vec"没有空间将5存储在"sub"函数中,它在哪里分配新的内存?
在子函数的堆栈框架中?在这种情况下,5将在子函数的末尾被删除.但是主函数的堆栈帧不能增长,因为子函数的堆栈帧在那一刻位于堆栈的顶部.
std :: vector是否为堆上的元素分配内存?但它如何释放堆内存呢?如果它是堆栈上的本地向量,那么包含该向量的函数的堆栈帧最终会被删除,而不会发信号通知它将被删除吗?