【发布时间】:2012-01-05 00:43:15
【问题描述】:
我有一些代码供大师检查。我知道这可能(绝对)不是删除内存的最佳方法,但请告诉我它是否可以。
我知道我应该使用智能指针,但我将在我的代码的下一个版本中这样做。
无论如何,这是我的问题。
我有一个每次循环启动的课程。我将此类指针传递给指向对象的指针向量,该对象在循环的每次迭代中也会发生变化。例如
vector<A*>* ex_A
然后我在类中使用这些指向向量的指针,并使用
将它们相互映射map< int, vector<B*>* >* ex_map.
然后可以通过公共成员函数之一通过类访问这个新地图。
在循环结束时,我希望删除内存,以便可以实例化下一个新类而不会出现段错误。
这是我正在做的一些示例代码:
MainClass.cxx 类内部
MainClass::MainClass(vector<A*>* ex_A, vector<B*>* ex_B, vector<C*>* ex_C): m_ex_A(ex_A), m_ex_B(ex_B), m_ex_C(ex_C) {}
MainClass::MakeMap(){
vector<A*>::iterator itr_A = m_ex_A->begin();
for(; itr_A != m_ex_A->end(); itr_A++){
//This member function returns a vector of B* that are dependent of A
vector<B*>* dependent_B = changeVectorB((*itr_A));
/Defined in Header File
//map< int, vector<B*>* >* m_mapAofB;
//Now get Map index of A with vector of B*
(*m_mapAofB)[(*itr_A)->Inedx()] = dependent_B;
}
}
我想在某个时候删除 m_mapAofB,所以我会循环遍历地图的每个值(这是指向指针向量的指针)。我使用类似于这个 URL 的东西来实现这一点。
C++ Generic code for deleting pointer value in Map and vector of pointers
我主要关心的是何时删除此内存,因为 MainClass 将处于 for 循环中。我是否应该在 for 循环的每次迭代结束时删除内存。这将允许 MainClass 的新实例化??
例如
for(int i = 0; i < 100000; i++){
//This will also change each loop
Vector<A*> ex1;
Vector<B*> ex2;
Vector<C*> ex3;
MainClass* ex_main = new MainClass(ex1,ex2,ex3);
///Do something....
//Finished with class now delete pointers
ex_main->DeleteMemory();
delete ex_main;
}
【问题讨论】:
-
首先,我要说的是,在循环的每次迭代中分配和释放内存都会对性能造成巨大影响。因此,就您的代码而言,我建议重新设计代码的工作方式,以允许在每次迭代中重用该类。
-
@Slade 什么是更好的解决方案?我正在尝试管理我的内存,因此我不会因为内存泄漏而获得任何 seq vault?
-
'new' 创建的类型在编译时是已知的,'MainClass' 对象的生命周期在 ex1、ex2 和 ex3 的生命周期内。所以你可以将 MainClass 实例化为一个局部变量 (MainClass ex_main(ex1, ex2, ex3)。它会快得多,因为可能会跳过新/删除调用。
标签: c++