c++ vector clear() 方法的问题

[复制链接]
查看11 | 回复4 | 2017-9-8 21:18:18 | 显示全部楼层 |阅读模式
vector,clear()并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size这些东西,让觉得把所有的对象清除了。真正释放内存是在vector的析构函数里进行的,所以一旦超出vector的作用域(如函数返回),首先它所保存的所有对象会被析构,然后会调用allocator中的deallocate函数回收对象本身的内存。所以,某些编译器clear后还能访问到对象数据(因为它根本没清除),在一些比较新的C++编译器上(例如VS2008),当进行数组引用时(例如a[2]这种用法),STL库中会有一些check函数根据当前容器的size值来判断下标引...
回复

使用道具 举报

千问 | 2017-9-8 21:18:18 | 显示全部楼层
你的这个问题不应该拿来讨论,而应该避免;vector 存放的是副本,如果元素是指针,元素只是简单的复制指针的地址,你用float *p=new float;然后放入vector ,最后不管删除哪一个都会造成悬空指针,非常糟糕的设计方法...
回复

使用道具 举报

千问 | 2017-9-8 21:18:18 | 显示全部楼层
因为对于vector,clear并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size...
回复

使用道具 举报

千问 | 2017-9-8 21:18:18 | 显示全部楼层
因为相应内存区域的内容并没有被覆盖,这样就保持着原来的值,直到这部分内存被重新写入时才会改变。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行