C++ 类内new的指针,如何释放?
用邻接表存有向图,顶点和边结点都是用类来实现的,图每次新增一条边时,调用add_edge()函数就会new一个边节点,等整个图建好时,不知道new了多少个边节点,但也不能new之后马上delete掉,因为整个图还没建完。
怎么去回收这部分内存呢?在哪里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;
}
...全文
相关推荐
C++内存管理技术内幕
C++内存管理,这个文档解释的非常详细,贴出来和大家分享下,
C++基础知识总结
本文给大家汇总介绍了C++的一些基础知识,不管是对新手还是老鸟都有些帮助,希望大家能够喜欢
类中使用指针和引用
学会在类中使用指针,包括类中有指针(数组)数据成员、指向对象的指针、指向数据成员的指针、指向成员函数的指针
C++实现 带引用计数的智能指针
C++实现 带引用计数的智能指针 VS2008工程文件
C++ 类的赋值运算符''=''重载的方法实现
主要介绍了C++ 类的赋值运算符'='重载的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


