[英]How to create array of pointers in C++
在Node
:
class Node {
public:
int data;
int numchild;
Node** nodelist;
Node(int data, int s);
};
我想要一个指向其他节点的指针数组( nodelist
),这些节点具有此节点的边缘。
以下构造此类数组的方式(以及上述声明方式)是否可能是正确且最佳(或最简单)的方式? 如果没有,为什么以及最好的方法是什么?
Node::Node(int d, int s) {
data = d;
numchild = s;
nodelist = new Node*[s];
}
通常,您不应该重新发明轮子。 原始数组几乎总是错误的方法。 看一下STL中的各种容器,即std::vector
, std::list
。 我想您认为std::vector
可能是最好的解决方案。
如果您要使用原始数组,请快速警告: new Node*[s]
不会初始化数组,因此其内容将不确定。 但是,如果添加一组括号( new Node*[s]()
),它将被初始化为零,这是一件好事,因为它可以帮助您发现已经填充了哪些条目。
另外,您当前的代码缺少析构函数以再次delete[]
节点列表。 这就是为什么建议使用标准容器的原因:它们具有析构函数可以为您完成工作。
好吧,如果您坚持,那么答案将既不是最好也不是最简单的,正确性现在已成为您的重担。
对于构造函数,请使用基本的初始化程序列表:
Node::Node(int d, size_t s)
: data(d), numchild(s), nodelist(new Node*[s])
{
}
我们还使numchild
为无符号类型,因为它表示一个大小。
但是现在您还必须注意在销毁时释放内存。 简单的delete[]
不会做,因为您首先必须遍历所有子级并递归地释放其内存。
总而言之,共享指针向量可以为您节省大约90%的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.