gpt4 book ai didi

c++ - 交换 vector 以释放它

转载 作者:行者123 更新时间:2023-12-04 08:30:26 27 4
gpt4 key购买 nike

我读过释放 vector 内存的最佳方法是:

vector<int>().swap(my_vector);
而且我真的不明白发生了什么。交换函数需要 2 个 vector 并交换它们的元素,例如:
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() 交换元素(空 vector ),那么空 vector 不是得到 my_vector 元素,my_vector 就变成空了吗?

最佳答案

您不仅要与空 vector 交换,还要与临时空 vector 交换。于是交换了两个 vector 的内存,然后临时 vector 的析构函数释放了原本是my_vector的内存。 s。
请注意,该标准有效地保证了在这种情况下 swap正在交换分配的内存。否则,此方法可能会引发异常,即 forbidden to do in this case .另外,请注意 vector 的默认构造函数也是无异常的,因此它实际上无法分配内存。正如 Aziuth 在评论中正确指出的那样,理论上它可以有一个小容量的非动态初始缓冲区,这将在交换中传输。在实践中,这可能可以忽略不计。

关于c++ - 交换 vector 以释放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65048425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com