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() }
注意,以上内容涉及IT技术。
EMapItr
破坏了C++11的for循环。特别是,C++11现在假设容器有一个叫做_确切_begin()
的方法。而不是beginRandom
。你仍然可以通过一个小技巧,在一个容器上有多种迭代方式:p_Map.randomView.begin()
。 - MSalters