繁体   English   中英

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

[英]is it ok to clear vector in a destructor

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是我的自定义哈希表。 功能与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()}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM