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() }
答案 0 :(得分:6)
标准库容器不需要在析构函数中清除,因为它们负责自己的内存管理。最好对自定义容器执行相同操作,因为这通常是预期的,并且无论如何都是避免内存问题的最佳方法。