C ++在传递给类时删除指向指针的指针

时间:2011-11-23 18:08:07

标签: c++

我有一些代码供大师检查。我知道这可能(绝对)不是删除内存的最佳方法,但只是让我知道它是否可能是正常的。

我知道我应该使用智能指针,但我会在下一版代码中执行此操作。

无论如何,这是我的问题。

我有一个每次循环启动的类。我将此类指针传递给指向对象的指针向量,该对象在循环的每次迭代中也会发生变化。 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;
}

2 个答案:

答案 0 :(得分:1)

我在很多层面上都很困惑,并认为它需要重新设计 - 但除此之外:

你说:

  

因为MainClass将处于for循环中。我应该删除内存   for循环的每次迭代结束。这将允许新的   实例化MainClass ??

那么,如果您计划在每次迭代结束时删除与其相关的内存,为什么您认为首先需要动态分配MainClass?它可以简单地是一个堆栈变量,它在循环的顶部创建并在每次循环时被销毁(或者更好的是,如Slade的注释中所述,你可以将它声明在循环之上,这样它就不会每次重新创建 - 会要求你有一个公共函数来改变它来模仿它的构造函数)。其次,将指针包装在对象中(我不在乎它们是否是真实的智能指针,只是包装它们)所以当你的向量超出范围时,你的包装析构函数会自动删除动态分配的内容。

答案 1 :(得分:0)

我不允许新的MainClass实例化,已经允许,它会释放你应该做的内存。是的,做吧。

相关问题