【发布时间】:2016-09-02 11:13:53
【问题描述】:
我现在正在设计我自己的带有邻接列表的图形类。我完成了除析构函数之外的大部分步骤。
这是我的 Vertex 类:
struct Vertex{
public:
Vertex(){m_name="";}
Vertex(string name):m_name(name){}
~Vertex(){
cout << "vertex des" << endl;
for(int i = 0; i < m_edge.size(); i++){
delete m_edge[i];
m_edge[i] = nullptr;
}
}
string m_name;
vector<Edge*> m_edge;
};
这是我的 Edge 课程:
struct Edge{
public:
Edge() : m_head(nullptr), m_tail(nullptr) {m_name="";}
Edge(string name) : m_name(name), m_head(nullptr), m_tail(nullptr) {}
~Edge(){
cout << "Edge des" << endl;
delete m_head;
m_head = nullptr;
delete m_tail;
m_tail = nullptr;
}
string m_name;
Vertex* m_head;
Vertex* m_tail;
};
但是,我注意到当调用析构函数时,两个类实际上都调用了彼此的析构函数,所以这给了我一个无限循环。这种设计有问题吗?如果没有,有没有办法解决这个析构函数问题?谢谢!
【问题讨论】:
-
哪一个是“所有者”,哪一个是“拥有”?所有者进行删除。
-
对应
deletes的new()在哪里?