繁体   English   中英

如何在C ++中创建指针数组

[英]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::vectorstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM