考虑以下代码片段:
#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,它会在哪里分配新的内存?
在sub函数的堆栈帧中吗?如果是这样,那么5将在sub函数结束时被删除。但是主函数的堆栈帧不能增长,因为此时子函数的堆栈帧位于堆栈顶部。
std::vector会在堆上为其元素分配内存吗?
但是它如何释放该堆内存呢?
如果它是一个位于堆栈上的局部向量,则包括向量的函数的堆栈帧最终会被删除,而不通知向量它将被删除吗?
sub(vector<int>& vec)
改成sub(vec)
会更易读 ;) - LihO