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

is it ok to clear vector in a destructor

本文关键字:清除 向量 析构函数 是否      更新时间:2023-10-16
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是我定制的哈希地图。 功能与标准:哈希地图相同请注意,MyVector是std::vector的自定义形式。功能与标准相同:矢量

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

以下代码是否正确,或者您是否看到任何问题

A::~A() {
   EMapItr eMItr = p_Map.beginRandom();
   for(; eMItr; ++eMItr) {
      delete eMItr.value();
   }
}

此外,我们是否需要清除如下所示的矢量,否则它将自动处理 E::~E() { mv.clear() }

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