【发布时间】:2022-01-24 16:35:25
【问题描述】:
C++ delete vector, objects, free memory 指出,为了在清除 std::vector 后释放分配的堆内存,可以这样做:
vector<int>().swap(myVector);
这是有道理的,但我想知道以下是否不会达到同样的效果。谁能告诉我是否有区别?
myVector = vector<int>();
【问题讨论】:
-
第二个选项可以调用移动赋值,唯一利用移动赋值的方法就是在语句结束时释放所有现有内存。撇开合法性不谈,如果一个人需要进行交换以实现任务应该做的事情,那将是一种耻辱。
-
@user1095108 我同意。我认为没有绝对的万无一失的方法可以使向量的容量变为零。我认为可以实现始终使用最小大小的缓冲区。您必须依靠空向量甚至没有尝试分配的实现常识。
-
唯一万无一失的方法是让向量超出范围。当您显然不打算重用它的容量时,为什么要保留它呢?所以放下它,并在您再次需要时创建一个新的(保证为空)向量。
-
@BoP 它可能是一个成员变量