我有一个解构器,该解构器可以用我制作的指针进行处理,但它无法正常工作。我的班级的一部分声明了所有指针
private:
struct Edge {
Vertex* node;
};
struct Vertex {
vector< Edge > adjList;
Vertex *path;
};
vector<Vertex*> vertices;
priority_queue< Vertex* > pq;
,有时我会在诸如so so 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;
}
" Vertex* v = new Vertex
我被告知我不必担心删除这些指针。"
好吧,它们是原始的指针。您必须担心删除它们。但是通常最简单的解决方案是将所有顶点放入Graph
类,让所有内容都拥有所有内容,而不必担心节点级别的所有权。
如果您将图表切成两分,或者正在进行操作,那么事情会有些毛茸茸。但是即使那样,通常不太难以从旧的Graph
提取新的Graph
并将受影响的节点传输到新图。