如果没有堆内存,如何释放std :: vector [英] How to release std::vector if there is no heap memory
问题描述
我有一个类成员变量,像这样:
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屋!