次のコードスニペットについて考えてみます。
#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は、ヒープ上の要素にメモリを割り当てますか?しかし、どのようにしてそのヒープメモリを解放するのでしょうか。スタック上のローカルベクトルの場合、ベクトルを含む関数のスタックフレームは、削除されることをベクトルに通知せずに、最終的に削除されますか?