У меня есть простой класс C ++ Node, который содержит массив данных-членов указателей на тот же тип. Этот массив выделяется динамически, и его указатели по умолчанию должны иметь значение null, но я не уверен, как этого добиться.
class Node
{
private:
Node *_nextNode[];
string _data;
}
Node::Node( const string &p_data, const int &p_levels ): _data(p_data)
{
//unsure how to initialize the '_nextNode[]' member so that the size of the array is of p_levels and they all default to null pointers
}
class SkipList
{
private:
}
Использовать std::vector<Node*>
:
Node::Node( const string &p_data, const int &p_levels ):
_data(p_data),
_nextNode(p_levels)
{
это инициализирует элементы _nextNode
в nullptr
s.
Рассмотрите возможность использования реализация интеллектуального указателя вместо Node*
управлять уничтожением Node
экземпляры для вас.
Если вы должны использовать Node*
тогда вам нужно Node**
указать на список Node*
:
class Node
{
private:
Node**_nextNode;
string _data;
};
Node::Node( const string &p_data, const int &p_levels ):
_data(p_data),
_nextNode(new Node*[p_levels]())
{ //^^ value initialization.
выделяет массив int*
содержащий p_levels
элементы и значение инициализирует их (устанавливает их NULL
). Node
необходимо знать, сколько элементов хранится в _nextNode
так p_levels
потребуется также хранение. Разрушение:
for (int i = 0; i < _nextNodeElements; i++)
{
delete _nextNode[i]; // delete NULL is safe, a no-op.
}
delete[] _nextNode;
Просто чтобы подтолкнуть вас к std::vector
снова: std::vector<std::unique_ptr<Node>> _nextNode;
не требует рукописного деструктора, будет достаточно сгенерированного по умолчанию.
_nextNode = new Node[pLevels];
memset ( _nextNode, 0, sizeof (_nextNode));
Это то, что вы хотите? Также вы должны объявить Node *_nextNode[]
как Node *_nextNode
И вам также придется включить <string.h>
за memset
Попробуйте использовать Node ** _ nextNode вместо Node * _nextNode [].
Node **_nextNode= new (NODE**)[ArraySize];
for (int i = 0; i < rows; ++i) {
_nextNode = NULL;
}