繁体   English   中英

std :: vector的boost :: shared_ptr的内存释放

[英]Memory release of boost::shared_ptr of std::vector

我正在尝试使用以下代码释放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不会超出范围,因为它是在睡眠线程中保持执行状态的对象的类成员。

如果您有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>在超出范围后不会清除内存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM