gpt4 book ai didi

c++ - 在 VC++ 2019 中释放 std::vector 的内存

转载 作者:行者123 更新时间:2023-12-01 23:16:03 26 4
gpt4 key购买 nike

我最近开始将我当前的项目从 VS2015 升级到 VS2019,而 VS2019 在某些方面有更多限制。我特别有问题的一件事是我目前释放 vector 内存的方式:

std::vector<int> v(10);
v.swap(std::vector<int>()); // v should now be empty with no memory held

这在 VS2015 中运行良好,但在 VS2019 中它不再起作用,因为我交换的 vector 是常量并且 vector::swap() 需要引用。这种行为最近发生了变化,并且对于比我更多的人来说肯定是个问题,因为这是释放 vector 内存的推荐方式。有关此问题的 MS 文档:https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c2664?view=msvc-160

如果不能交换它,推荐的释放 vector 内存的新方法是什么?

最佳答案

你倒着做。要以有保证的方式清除和释放 vector 的内存,请声明一个临时 vector 并将需要清除的 vector 交​​换到其中。这会将您的代码调整为

std::vector<int>{}.swap(v);

在表达式结束时,临时对象将被销毁,并带走 v 的内存。


这项工作之前的原因是微软有一个 evil extension默认情况下启用,允许纯右值绑定(bind)到非常量左值引用。由于该扩展不再存在,旧的非标准代码现在无法编译。

关于c++ - 在 VC++ 2019 中释放 std::vector 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68863485/

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