C++ 类内new的指针,如何释放?

舒泱 舒泱 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用邻接表存有向图,顶点和边结点都是用类来实现的,图每次新增一条边时,调用add_edge()函数就会new一个边节点,等整个图建好时,不知道new了多少个边节点,但也不能new之后马上delete掉,因为整个图还没建完。

怎么去回收这部分内存呢?在哪里delete?

class My_graph {
private:
// 边节点
class Edge_node {
public:
unsigned int vertex_id; // 顶点
int edge_data; // 边信息,如权重
Edge_node* next{ nullptr };
Edge_node() = default;
Edge_node(unsigned int v_id, int edge_info) {
this->vertex_id = v_id;
this->edge_data = edge_info;
next = nullptr;
}
};

// 顶点节点
class Vertex_node {
public:
int vertex_data; // 顶点数据
Edge_node* first_edge_node{ nullptr };
Vertex_node() = default;
Vertex_node(int vertex_data) {
this->vertex_data = vertex_data;
}
};

vector<Vertex_node> vertices;

public:
My_graph() = default;
void add_vertex(int vertex_data); // 添加顶点,并返回顶点在vector中的下标
bool add_edge(unsigned int v1,unsigned int v2, int edge_data=0);
};

void My_graph::add_vertex(int vertex_data) {
vertices.push_back(Vertex_node(vertex_data)); // 添加顶点
}

// 就是下面这个增加边的函数!!!
bool My_graph::add_edge(unsigned int v1,unsigned int v2, int edge_data) {
// new一个边节点,什么时候delete??????????????????????????????????
Edge_node* p = new Edge_node(v2, edge_data);
if (!p) {
return false;
}
// 前插法插入边节点
p->next = vertices[v1].first_edge_node;
vertices[v1].first_edge_node = p;
return true;
}
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
舒泱
C++ 语言 65,214 成员 250,514 内容