ベクターのメモリ管理がどのように機能するかについて、いくつか質問/例があります。
vector<int> vec1(10);
vector<int> vec2(10);
vec1 = vec2;
このような場合、vec1 の古いメモリには到達できなくなります。ここでもまだメモリ リークですか、それとも vec2 の古いメモリは、それを参照するものが何もないことに気づき、クリーンアップされますか?
別の例では
struct foo
{
vector<int> foo_vec(50);
int* arr;
}
void myFunction()
{
vector<foo> vec(10);
vec[0].arr = new int[50];
vec.erase(vec.begin());
}
erase()
割り当てられたメモリで arr を含む最初のベクター要素で使用したので、erase()
そのメモリを解放しますか、それとも消去する前に手動で解放する必要がありますか? またvec
、範囲外になった場合、すべてのfoo_vec
ベクトルがvec
自動的にクリーンアップされますか? 助けてくれてありがとう。