my_*_*ion 6 c++ memory-management vector
我有一个这样的类成员变量:
vector<vector<int> > m_stacks;
Run Code Online (Sandbox Code Playgroud)
当我填充它时,我喜欢这样:
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);
Run Code Online (Sandbox Code Playgroud)
现在我想知道我应该在类析构函数中做什么来释放m_stacks.我没有为它分配任何堆内存,所以如果我真的需要做任何事情我就会挣扎.最后我来了 -
vector<vector<int> >::iterator itr = m_stacks.begin();
for ( ; itr != m_stacks.end(); ++itr) {
itr->clear();
}
Run Code Online (Sandbox Code Playgroud)
我认为这是我最需要做的,我不需要打电话m_stacks.clear().原因是vector的析构函数可以自动释放内存.但是我仍然需要上面的代码,原因是vector的析构函数不调用它的元素的析构函数.
你能确认我的电话吗?
向量的析构函数将执行两项操作:它将销毁向量的每个元素,然后它将释放用于向量本身的内存.这是自动的.
在你的情况下,你有两个嵌套的矢量,但没关系.当顶层向量被破坏时,它将为它包含的每个向量调用析构函数,并且所有这些向量将正确地清理它们自己.
在std::vector析构函数调用它分配内存删除,从而调用该类型(在这种情况下,一个std::vector<int>的)析构函数.
这些数据结构都依赖于SBRM(范围绑定资源管理)或RAII(资源获取是初始化)原则,因为它们分配的所有内存一旦超出范围(例如类的范围)就会被解除分配.
std::vector除非它拥有一个指向内存的类型,否则你不必担心从a释放内存; 但不会固有地释放它(例如指针!).
| 归档时间: |
|
| 查看次数: |
3486 次 |
| 最近记录: |