有什么区别:
// bb has a million elements
vector<B>().swap(bb);
//and
bb = Vector<B>();
Run Code Online (Sandbox Code Playgroud)
幕后发生了什么?
总的来说,两者的语义略有不同:
现在,特别是您的示例和std::vector:
std::vector<B>().swap(bb);
Run Code Online (Sandbox Code Playgroud)
这会:
__tmp)__tmp连同以前的内容一起销毁bb结果是bb留空了。
另一方面:
bb = std::vector<B>();
Run Code Online (Sandbox Code Playgroud)
bb将用空向量的内容覆盖 的内容。根据您使用的是 C++03 还是 C++11(或更高级),行为会有所不同:
bb被破坏,但bb可能保留其容量(即,它像以前一样为一百万个元素分配了内存)std::vector<B>可以替换bb或不替换;据我所知,没有正式义务因此,虽然bbwill 是空的,但并不清楚它的内部容量最终是什么。
从历史上看,当人们想要确保减少其容量(以释放内存)时,std::vector<B>().swap(bb)这是清除内容的推荐方法。bb
如今(C++11 之后),有一个明确的shrink_or_fit方法可以做到这一点,但由于不强制要求实际减少容量,而且旧习惯很难改掉,因此您可能仍然会遇到这种形式。