gpt4 book ai didi

c++ - 在析构函数中清除 vector 可以吗

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:51 24 4
gpt4 key购买 nike

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();
}
}

我们还需要像下面这样清除 vector ,否则它会被自动处理 E::~E() { mv.clear() 函数

最佳答案

标准库容器不需要在析构函数中清除,因为它们负责自己的内存管理。最好对您的自定义容器执行相同的操作,因为这通常是预期的,而且无论如何都是避免内存问题的最佳方法。

关于c++ - 在析构函数中清除 vector 可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36152662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com