[英]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.