关于C++中std::vector临时对象swap调用含义的咨询
关于
std::vector<int>().swap(search_indices)写法的解析 这是C++里用来清空容器并彻底释放内存的技巧,和直接调用clear()的效果有本质区别,具体拆解如下:
std::vector<int>():创建一个临时的空vector对象,这个临时对象没有为元素分配堆内存(仅占用容器本身的固定开销)。.swap(search_indices):交换临时对象和search_indices的内部核心数据(包括存储元素的堆内存指针、容器的大小、容量等)。- 交换完成后,原
search_indices会变成临时对象的空状态(容量被重置为0,之前占用的堆内存被转移给临时对象);而临时对象在代码行执行结束后会被自动销毁,它持有的旧内存也就被系统回收了。
和clear()的区别
直接调用search_indices.clear()只会删除容器内的元素,但容器的容量(capacity)保持不变——也就是之前分配的堆内存还会被保留,不会释放。而这种swap写法会彻底释放容器占用的堆内存,把容量重置为0,适合需要严格控制内存开销的场景。
结合你的代码场景
在你提供的循环逻辑里,每次迭代都用这种方式重置search_indices和distances,目的是确保这两个容器在每次新的半径搜索开始前,完全清空且释放上一次循环占用的内存,既避免不必要的内存浪费,也能保证每次搜索得到的都是全新的结果集合。
内容的提问来源于stack exchange,提问作者刘醒醒
相关产品推荐
相关产品推荐

