c++,stl容器调用clear清除数据出现假删除,需要使用swap交换方法以释放容器内存容量
1、场景:
使用stl容器,例如vector时,想要清除其原有数据时,一般会直接调用其clear函数,但这样没有将容器内存删除干净。
2、问题:
容器中的数据没了,容器中的内存还在,也就是clear可以清除数据使容器size变成0,但不会是容器容量capacity变成0.
3、例子:
清除了,没全清除。
调用clear前,容器size为16,容量为19
调用clear后,容器size为0,数据成功被清除,但容量还是19,
4、解决方法:
clear与swap结合,之前博文讲述了swap可以缩减容器容量到当前size值,通过clear将size变成0以后,通过swap缩减容量为0,就可以得到一个“崭新”的空容器了,常用于清除类中数据容器。
clear后size为0,capacity为19
swap以后capacity也变成0,实现了内存释放。