我有一些代码供大师检查。我知道这可能(绝对)不是删除内存的最佳方法,但只是让我知道它是否可能是正常的。
我知道我应该使用智能指针,但我会在下一版代码中执行此操作。
无论如何,这是我的问题。
我有一个每次循环启动的类。我将此类指针传递给指向对象的指针向量,该对象在循环的每次迭代中也会发生变化。 e.x。
vector<A*>* ex_A
然后我使用这些指向类中矢量的指针,并使用
将它们相互映射map< int, vector<B*>* >* ex_map.
然后,可以通过其中一个公共成员函数通过类访问此新映射。
在循环结束时,我希望删除内存,以便可以在没有seg错误的情况下实例化下一个新类。
以下是我正在做的一些示例代码:
内部类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,所以我会遍历map的每个值(这是一个指针向量的指针)。我使用类似于此URL的内容来实现此目的。
C++ Generic code for deleting pointer value in Map and vector of pointers
我主要担心的是何时删除此内存,因为MainClass将处于for循环中。我应该在for循环的每次迭代结束时删除内存。这将允许MainClass的新实例化
e.x。
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;
}
答案 0 :(得分:1)
我在很多层面上都很困惑,并认为它需要重新设计 - 但除此之外:
你说:
因为MainClass将处于for循环中。我应该删除内存 for循环的每次迭代结束。这将允许新的 实例化MainClass ??
那么,如果您计划在每次迭代结束时删除与其相关的内存,为什么您认为首先需要动态分配MainClass?它可以简单地是一个堆栈变量,它在循环的顶部创建并在每次循环时被销毁(或者更好的是,如Slade的注释中所述,你可以将它声明在循环之上,这样它就不会每次重新创建 - 会要求你有一个公共函数来改变它来模仿它的构造函数)。其次,将指针包装在对象中(我不在乎它们是否是真实的智能指针,只是包装它们)所以当你的向量超出范围时,你的包装析构函数会自动删除动态分配的内容。
答案 1 :(得分:0)
我不允许新的MainClass实例化,已经允许,它会释放你应该做的内存。是的,做吧。