我有一个解构函数,假设要释放我所做的指针,但它没有按预期工作。这是我的类的一部分,它声明了所有的指针
private:
struct Edge {
Vertex* node;
};
struct Vertex {
vector< Edge > adjList;
Vertex *path;
};
vector<Vertex*> vertices;
priority_queue< Vertex* > pq;
偶尔我会在像Vertex* v = new Vertex
这样的函数中声明新的顶点。我被告知我不必担心删除这些指针。继承我释放我的解构器所调用的记忆的功能
void makeEmpty( ) {
for(int i = 0; i < total; ++i)
makeEmpty( vertices[ i ] );
total = 0;
}
void makeEmpty( Vertex * & v ) {
for( int i = 0; i < v->adjList.size(); ++i ){
//delete v->adjList[ i ].node;
//v->adjList[ i ].node = nullptr;
}
if ( v->path != nullptr ) {
makeEmpty( v->path);
delete v;
v = nullptr;
}
}
我评论了我的adjList
,因为我正在尝试不同的方法来实现这一点,但没有任何方法。任何人都可以帮助我吗?
忘记提及所有这些指针都与相同的顶点/节点相关。所有使用的顶点/节点都在我的顶点
中编辑:我得到了它的工作,结果我过于复杂的事情,只是需要这样做
void makeEmpty( Vertex * & v ) {
delete v;
v = nullptr;
}
答案 0 :(得分:0)
&#34; Vertex* v = new Vertex
我被告知我不必担心删除这些指示。&#34;
嗯,他们是原始指针。您必须担心删除它们。但通常最简单的解决方案是将所有顶点放在Graph
类中,让它拥有所有内容,而不必担心节点级别的所有权。
如果您将图形切成两半,或者正在执行可能将图形切成两半的操作,那么事情会变得有点毛茸茸。但即便如此,通常也不会有太难从旧Graph
中提取新Graph
的操作,并将受影响的节点传输到新的图形。