Как использовать умные указатели в простой реализации дерева

Это узел для дерева B +. Я хотел использовать умные указатели, так как моя программа теряет много памяти. Как можно конвертировать код с помощью умных указателей?

class node
{

public:

long* key;
int capacity;
node** nodes;
node* parent;
long* value;

node ( int order ) {
key = new long[order + 1];
value = new long[order + 1];
nodes = new node *[order + 2];
capacity = 0;
parent = NULL;
for ( int i = 0; i <= order + 1; i++ ) {
this->nodes[i] = NULL;
}
}
~node() {
delete[] key;
delete[] value;
for ( int i = 0; i <= order + 1; i++ ) {
delete nodes[i];
}
}

};

0

Решение

Не используйте умные указатели. Будь умным и не используйте указатели, а скорее контейнеры:

#include <vector>

struct node
{
std::vector<long>   keys;
std::vector<long>   values;

std::vector<node *> nodes;
node *              parent;
};

В зависимости от ограничений вашей структуры я мог бы даже пожелать сделать parent node & (если родитель всегда идет первым и никогда не меняется), или, может быть, std::reference_wrapper<node>, Но это небольшая хитрость.)

4

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

Других решений пока нет …