【发布时间】:2021-03-10 21:22:55
【问题描述】:
我读过释放向量内存的最佳方法是:
vector<int>().swap(my_vector);
我真的不明白发生了什么。交换函数需要 2 个向量并交换它们的元素,例如:
vector<int>v1{1,2,3};
vector<int>v2{4,5,6};
v1.swap(v2);
v1 变为 {4,5,6},v2 变为 {1,2,3}。这看起来很正常。但是我的第一个示例如何释放内存?内存内部会发生什么?如果my_vector与vector()(一个空向量)交换元素,那么空向量不是得到my_vector元素,my_vector就变成空了吗?
【问题讨论】:
-
它不会释放内存。 Swap 将第一个 v1 元素的内存地址从 v1 更改为 v2
-
哦,这就是交换的工作原理?我认为它是通过一些 for 循环完成的:))。那么,如何释放内存呢?
-
因为你用一个临时的空向量实例交换内存,该实例在
;之后立即被销毁 -
要释放它,请拨打
vector::clear,然后拨打vector::shrink_to_fit。或者干脆让向量超出范围。取决于你想做什么。 -
我读到shrinktofit方法不好
标签: c++ arrays pointers recursion vector