1
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:向量是否可以清除析構函數中的向量
我不想刪除M級M *的指針
是下面的代碼正確或不喲看到在同一
A::~A() {
EMapItr eMItr = p_Map.beginRandom();
for(; eMItr; ++eMItr) {
delete eMItr.value();
}
}
而且什麼問題我們需要明確的矢量如下否則將被自動照顧 Ë::〜E(){ mv.clear() }
你的自定義迭代器'EMapItr'打破了C++ 11 for循環。特別是,C++ 11現在假定容器有一個名爲_exactly_'begin()'的方法。不是'beginRandom'。您仍然可以通過多種方法通過一個小技巧遍歷單個容器:'p_Map.randomView.begin()'。 – MSalters