是否可以清除析构函数中的向量

时间:2016-03-22 11:02:47

标签: c++ vector

class M {
};

class E {
   public:
     ~E();     
   private:
    MyVector mv;

}; 

E::~E() {
   mv.clear()
}

typedef MyHashMap<M*, E*> EMap;
typedef MyHashMap<M*, E*>::iterator EMapItr;

class A : public class Base {

    public:
        ~A();
        const EMap& getEMap() { return p_emap};  
        virtual void  func();

    protected:
        EMap p_Map;
};

A::~A() {
   EMapItr eMItr = p_Map.beginRandom();
   for(; eMItr; ++eMItr) {
      delete eMItr.value();
   }
}
class DB {
    public fill(EMap* p_Map);
};

class Derived: public A {
    private:
       DB dp;   
};

class GUI {
    public:
      void guiFunc();  
}

void GUI:guiFunc() {
   Derived* d = new Derived;
   d->func(); 

}

void Derived::func() {
   db.fill(&p_map);
}

请注意MyHashMap是我自定义的hashmap。功能与std:hashmap相同 请注意MyVector是std :: vector的自定义形式。功能与std:vector

相同

我不想删除M类M *的指针

以下代码是正确的,或者在同一

中看到任何问题
A::~A() {
   EMapItr eMItr = p_Map.beginRandom();
   for(; eMItr; ++eMItr) {
      delete eMItr.value();
   }
}

我们还需要清除下面的矢量,否则它会自动处理      E :: ~E(){        mv.clear()     }

1 个答案:

答案 0 :(得分:6)

标准库容器不需要在析构函数中清除,因为它们负责自己的内存管理。最好对自定义容器执行相同操作,因为这通常是预期的,并且无论如何都是避免内存问题的最佳方法。