【发布时间】:2020-02-22 16:06:35
【问题描述】:
所以我正在编写一个类模板,我的类包含一个指向包含类类型实例的数组的指针。 我的问题是我班级的构造函数。 在我的构造函数中使用 new 关键字时,它无法正常工作。 问题是当我在构造函数中使用 new 时没有创建我的数组。 (就像它总是一个空指针而不是一个包含 Node 类实例的数组) 我还应该说没有任何错误。 这是我的代码。
#include <iostream>
#include <cstddef>
template <typename V>
class Node {
private:
V _data;
unsigned short _size;
Node<V>* _children;
public:
Node();
Node(V);
Node(V, unsigned short);
Node(const Node&); // copy constructor
~Node();
};
template <typename V>
Node<V>::Node()
: _data(0), _size(0), _children(nullptr) {}
template <typename V>
Node<V>::Node(V data)
: _data(data), _size(0), _children(new Node<V>[_size]) {}
template <typename V>
Node<V>::Node(V data, unsigned short size)
: _data(data), _size(size), _children(new Node<V>[_size]) {}
template <typename V>
Node<V>::Node (const Node& other)
: _size(other._size), _data(other._data) {
_children = new Node<V>[_size];
for (unsigned short i = 0; i < _size; i++)
_children[i] = other._children[i];
}
template <typename V>
Node<V>::~Node() { delete[] _children; }
int main () {
Node<int> n1;
Node<char> n2('A');
Node<char> n3('B', 5);
return 0;
}
感谢您。
【问题讨论】:
-
如何它不是“正常工作”?请编辑您的问题以包括会发生什么以及应该发生什么。如果您遇到构建错误,请包含构建输出的完整和完整的复制粘贴,并在您遇到错误的行中添加 cmets。也请花一些时间阅读how to ask good questions,以及this question checklist。
-
它可能无法解决问题,不管它是什么,但是不要使用
Node<V>*使用std::shared_ptr或std::unique_ptr。 -
@Someprogrammerdude 我刚刚编辑了问题.... _children 属性指向节点的 5 个实例,我得到 _children 没有指向任何内容(nullptr)。我邀请你(如果可能的话)执行pythontutor.com 中的代码,看看我在说什么。
-
Node<V>::Node(V data): _size(0), _children(new Node<V>[_size]) {}是有问题的,因为它本质上是调用new Node<V>[0] -
@churill 那么我应该怎么做才能修复它??????任何建议
标签: c++ arrays pointers templates constructor