如果没有堆内存,如何释放std :: vector [英] How to release std::vector if there is no heap memory

查看:352
本文介绍了如果没有堆内存,如何释放std :: vector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类成员变量,像这样:

  vector< vector< int& > m_stacks; 

当我填充它,我这样做:

 矢量< int> v; 
v.push_back(1);
v.push_back(2);
m_stacks.push_back(v);
vector< int> v2;
v2.push_back(1);
v2.push_back(2);
m_stacks.push_back(v2);



现在我想知道我应该在类析构函数中如何发布 m_stacks 。我不为它分配任何堆内存,所以如果我真的需要做任何事情,我很努力。最后我想出了这个 -

  vector< vector< int> > :: iterator itr = m_stacks.begin(); 
for(; itr!= m_stacks.end(); ++ itr){
itr-> clear();
}

我认为这是我最需要做的,我不需要调用 m_stacks.clear()。原因是vector的destructor可以自动释放内存。但是我仍然需要上面的代码,原因是向量的析构函数不调用其元素的析构函数。



你能确认我的调用吗?


m_stacks class

数据成员)。当析构函数被调用时,获取的内存将被自动释放。这是使用 std :: vector 的目的。


I have a class member variable like this:

vector<vector<int> >  m_stacks;

When I populate it, I do like this:

vector<int> v;
v.push_back(1);
v.push_back(2);
m_stacks.push_back(v);
vector<int> v2;
v2.push_back(1);
v2.push_back(2);
m_stacks.push_back(v2);

Now I am wondering what I should do in the class destructor to release m_stacks. I do not allocate any heap memory for it, so I am struggling if I really need to do anything. Finally I come up this -

vector<vector<int> >::iterator itr = m_stacks.begin();
for ( ; itr != m_stacks.end(); ++itr) {
  itr->clear();
}

I think this is the most I need to do, I do not need to call m_stacks.clear(). The reason is vector's destructor can automatically release the memory. But I still need the above code though, the reason is vector's destructor does not call its element's destructor.

Could you confirm my call?

解决方案

You don't have to do anything for m_stacks (a class data member). Acquired memory will be released automatically when the class destructor will be called. This is the purpose for which std::vector is used.

这篇关于如果没有堆内存,如何释放std :: vector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆