gpt4 book ai didi

c++ - std::vector 的 boost::shared_ptr 的内存释放

转载 作者:行者123 更新时间:2023-11-28 06:46:44 24 4
gpt4 key购买 nike

我正在尝试释放 boost::shared_ptr<std::vector<std::vector<std::vector<int> > > > 的内存使用以下代码:

vec->clear();
std::vector<std::vector<std::vector<int> > > (*vec).swap(*vec);

但由于某种原因,它无法正常工作。我用 htop 命令检查过,使用的内存与我从未释放过的对象相同。

然后我尝试像这样分别释放每个 vector :

for (auto it1 : *vec) 
{
for (auto it2 : it1)
{
it2.clear();
std::vector<int>(it2).swap(it2);
}
it1.clear();
std::vector<int>(it1).swap(it1);
}

但仍然消耗相同数量的内存。

我做错了什么吗?也许它与 shared_ptr 有关,因为我之前发布了没有指针的 vector 并且它起作用了。

更新

shared_ptr 不会超出范围,因为它是在休眠线程中保持执行的对象的类成员。

最佳答案

如果你有一个 std::shared_ptr<std::vector>>你想删除它:

std::shared_ptr<std::vector<T>> ptr = ...;
ptr.reset();

如果你有一个 std::vector<std::shared_ptr<T>>你想清空它:

std::vector<std::shared_ptr<T>> vec = ...;
vec.clear();

如果你有一个 std::vector<T>你想要 vec.capacity() == vec.size() :

std::vector<T> vec = ...;
vec.shrink_to_fit(); // or: std::vector<T>(vec).swap(vec);

如果您担心 htop 没有显示分配给进程的内存量减少,那么让我们将其标记为这篇文章的拷贝:vector<string> does not clear memory after out of scope

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

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