如何在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::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%的代码。
相关文章:
- 如何创建指针链?我想创建具有指向更多对象的指针的对象,该对象具有指针.这可能吗?
- c++ 获取非语法使用"&"创建指针
- 在自定义构造函数中的堆上创建指针
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 创建指针会占用大量资源吗?
- 创建指针时是否没有构造函数调用
- 以不寻常的方式创建指针
- 在类中创建指针到另一个对象
- Visual Studio 2015"非标准语法;使用"&"为成员创建指针"
- 创建指针 C++ 时获取段错误
- 当我在 c++ 中创建指针数组时无法读取的内存
- 创建指针列表的正确范例是什么
- 如何在C 11中创建指针映射以静态成员功能
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 如何使用双指针创建指针数组?
- 创建指针数组
- C++:创建指针的副本
- 使用new创建指针数组,这样指针就不会初始化为NULL
- 如何在不从参数列表中创建对象的情况下创建指针
- 如何在定义后创建指针和结构实例