有什么区别:
// bb has a million elements
vector<B>().swap(bb);
//and
bb = Vector<B>();
引擎盖下会发生什么?
答案 0 :(得分:2)
一般来说,两者的语义略有不同:
现在,特别是您的示例和std::vector
:
std::vector<B>().swap(bb);
这将:
__tmp
)__tmp
以及之前bb
结果是bb
留空。
另一方面:
bb = std::vector<B>();
将使用空向量覆盖bb
的内容。根据您使用的是C ++ 03还是C ++ 11(或更高级),行为会有所不同:
bb
的元素被破坏,但bb
可能保留其容量(也就是说,它具有像以前一样分配给一百万个元素的内存)。std::vector<B>
的内部缓冲区可能会替换bb
的内部缓冲区;没有我所知道的正式义务因此,虽然bb
将为空,但目前尚不清楚其内部容量最终是什么。
从历史上看,std::vector<B>().swap(bb)
是一种清除bb
内容的推荐方法,当人们想要确保降低其容量(释放内存)时。{/ p>
如今(在C ++ 11之后),有一种明确的shrink_or_fit
方法可以做到这一点,但是因为它没有强制要求实际减少容量,而且由于旧习惯很难消除,你仍然可能会遇到这种形式。
答案 1 :(得分:1)
内存泄漏是由于缺少指针而无法访问的内存。 向量是一个容器,旨在执行动态分配以避免此内存泄漏,因此您作为用户不需要处理它。