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

标签 c++ arrays class pointers constructor

在类 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[] 节点列表的析构函数。这正是推荐使用标准容器的原因:它们具有可以为您完成工作的析构函数。

关于c++ - 如何在C++中创建指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498039/

相关文章:

c++ - 捕获 C++ 中构造函数抛出的错误?

android - 如何在两个轴上旋转 QQuaternion

c++ - 如何将动态矩阵复制到 CUDA 中的设备内存?

javascript - Ruby 中的索引

c++ - 覆盖函数及其在基类中的调用

c++ - 同一类对象之间的分支预测

python - 突变后更新动态依赖的对象属性

c++ - 从可调用元组的结果创建元组

java - 将 int 数组分成 3 部分,最大化 2 个较小部分的大小

java - 在康威的生命游戏中将平滑的线条绘制到网格[二维数组]