Это узел для дерева 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];
}
}
};
Не используйте умные указатели. Будь умным и не используйте указатели, а скорее контейнеры:
#include <vector>
struct node
{
std::vector<long> keys;
std::vector<long> values;
std::vector<node *> nodes;
node * parent;
};
В зависимости от ограничений вашей структуры я мог бы даже пожелать сделать parent
node &
(если родитель всегда идет первым и никогда не меняется), или, может быть, std::reference_wrapper<node>
, Но это небольшая хитрость.)
Других решений пока нет …