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