之间有什么区别
someVector.clear();
std::vector<int> ().swap(someVector);
和
someVector.clear();
std::vector<int> (someVector).swap(someVector);
或者他们是否完成同样的事情?
编辑: 目标是释放与someVector相关的记忆。
答案 0 :(得分:3)
他们都试图清除向量并释放它正在使用的存储。简单地呼叫clear()
并不能保证这样做;它可能会保留向量的容量。
在第一种情况下,对clear
的调用毫无意义;第二行将向量交换一个空行,然后释放内存。
在第二种情况下,仍无法保证内存将被释放;复制矢量可能会也可能不会保留容量。
这样做的方法是:
std::vector<int> ().swap(someVector);
在C ++ 11中,您可以在shrink_to_fit()
之后调用clear()
;但这也无法保证释放内存。
答案 1 :(得分:0)
第一个创建一个空向量(默认构造函数)并将其与someVector交换;第二个从someVector创建一个向量(复制构造函数)并将其与someVector交换。你的情况没有区别,因为你调用了clear()