Инициализация массива элементов данных указателей объектов на правильный размер и ноль

У меня есть простой класс 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:

}

0

Решение

Использовать std::vector<Node*>:

Node::Node( const string &p_data, const int &p_levels ):
_data(p_data),
_nextNode(p_levels)
{

это инициализирует элементы _nextNode в nullptrs.

Рассмотрите возможность использования реализация интеллектуального указателя вместо 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; не требует рукописного деструктора, будет достаточно сгенерированного по умолчанию.

2

Другие решения

_nextNode = new Node[pLevels];
memset ( _nextNode, 0, sizeof (_nextNode));

Это то, что вы хотите? Также вы должны объявить Node *_nextNode[] как Node *_nextNode
И вам также придется включить <string.h> за memset

1

Попробуйте использовать Node ** _ nextNode вместо Node * _nextNode [].

Node **_nextNode= new (NODE**)[ArraySize];
for (int i = 0; i < rows; ++i) {
_nextNode = NULL;

}

0
По вопросам рекламы [email protected]