我正在尝试使用以下代码释放boost::shared_ptr<std::vector<std::vector<std::vector<int> > > >
的内存:
vec->clear();
std::vector<std::vector<std::vector<int> > > (*vec).swap(*vec);
但由于某种原因,它无法正常工作。我检查了 htop 命令,使用的内存与我从未发布过的内存相同。
然后我尝试分别释放每个向量,如:
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有关,因为我之前发布了没有指针的向量而且它有效。
更新
shared_ptr不会超出范围,因为它是一个在睡眠线程中保持执行的对象的类成员。
答案 0 :(得分:1)
如果您有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