0

これは 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];
        }
    }

};
4

1 に答える 1

5

スマート ポインターを使用しないでください。賢く、ポインタではなくコンテナを使用してください

#include <vector>

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

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

構造の制約に応じてparentnode &(親が常に最初に来て決して変わらない場合) またはstd::reference_wrapper<node>. しかし、それは些細な問題です。)

于 2012-10-25T23:53:22.053 に答える