测试容器内的内存释放
struct S1
{
int a;
};
list ls1;
void fn()
{
for (int i = 0; i < 100000; i++)
{
S1 s1 = { i };
ls1.push_back(s1);
}
}
//
//类似这样的情况下
//是可以直接调用ls1.clear()释放掉容器list内的内存的
//
再深入一点
struct S1
{
int a;
};
struct S2
{
int b;
list ps1;
};
list ls1;
void fn()
{
for (int i = 0; i < 1000; i++)
{
S2 s2 = {0};
for( int j = 0; j < 1000;j++ )
s2.ps1.push_back( {j} );
ls1.push_back( s2 );
}
}
//
//类似这样的情况下
//也是可以直接ls1.clear()释放掉容器list内的内存的
//
* 但是这种情况下:
list ls2;
void fn2() {
for (int i = 0; i < 100000; i++) {
S1* ps1 = new S1;
ls2.push_back(ps1);
}
}
//直接clear只会清空指针而已,并不能释放其指向的内存
//所以这种方式要自己释放
void del()
{
for (auto it = ls2.begin(); it != ls2.end(); delete *it, it = ls2.erase(it) );
}
//or
void del()
{
for (auto &it : ls2)
delete it;
ls2.clear();
}